我有一个带download.php页面的系统。该页获取并标识一个基于数据库记录的文件,然后将其送达。我注意到有几个实例在短时间(20毫秒)内多次请求文件。时间太快,不适合人类输入。在很多情况下,下载程序运行良好。然而,在仔细观察下载程序的使用情况时,我确实看到了一些有趣的行为。
例如,IP地址xxx.xxx.xxx.xxx(在德国属于xxxxxx.de的一个范围内)是通过谷歌到达该站点的。他们浏览了一下,然后来到那一页。
http://site.com/xxxx/press+125.php
他们在那里发出了/download.php的请求?上午9:04:23,id=/zz/n+ah55y=(PDF格式)。光是这个没什么大不了的。然而,有趣的是,服务器似乎已经非常专注于服务于该请求。在日志中,请求首先在9:09:48到9:10:00之间完成。看起来用户一定已经厌倦了在这段时间内等待,并再次请求文档。在09:14:47到09:15:00之间,相同的请求再次出现,但从上午9:04:43开始,比第一个请求晚20毫秒。然后第三次弹出,从09:05:06开始的请求在09:19:55到09:19:58之间完成!
我怀疑那份文件。在查看日志的过程中,我看到了服务器处理该特定文件需要一些时间的其他实例。查看来自zzz.zzz.zzz.zzz[与上面不同]的文件/download.php的请求列表?id=/zz/n+ah55y=(与之前相同的文档):
请求时间完成时间
04:32:43 04:33:36
04:32:50 04:33:36
04:32:51 04:33:38分
04:33:05 04:33:38分
04:33:34 04:33:42
04:33:05 04:33:42
所以肯定发生了什么事。它是否与这个特定的文档导致服务器崩溃有关,download.php页面代码,或者只是在实时im中看到一些服务器级过载的证据还不确定。
公平地说,还有其他人下载/download.php的例子吗?id=/zz/n+ah55y=(相同的pdf)没有错误。然而,有趣的是,多个进程似乎只发生在这个文件上,并且只有在通过页面访问它时才会发生
http://site.com/press+125.php
. 如果代码中有错误导致系统触发占用服务器的多个下载请求,则需要进一步调查。
我不知道这个press+125.php是不是一个兔子洞,但有一个奇怪的一致性。
有什么想法吗?我完全没主意了。阿帕奇疯了?诸如此类的事情。
$file = new files();
$file->comparison_filter("id", "=", $id);
if ($file->load()) {
$file->serve();
}
function serve() {
if ($this->is_loaded) {
if (file_exists($this->get_value("filename"))) {
if ($this->get_value("content_type") != "") {
header("Content-Type: " . $this->get_value("content_type"));
}
header("Content-Length: " . filesize($this->get_value("filename")));
if ($this->get_value("flag_image") == 0 || $this->get_value("flag_image") == false) {
header("Cache-Control: private");
header("Content-Disposition: attachment; filename=" . urlencode($this->get_value("original_filename")));
}
set_time_limit(0);
@readfile($this->get_value("filename"));
exit;
}
}
}