Apache / PHP服务文件多次

时间:2010-02-05 15:03:52

标签: php apache file download

我有一个带有download.php页面的系统。页面从DB记录中获取并识别并加载文件,然后将其提供。我注意到有几个实例在短时间跨度(20ms)内多次请求文件。人类投入过快的时间。有很多实例,下载程序运行正常。但是,在仔细研究下载器的用法时,我确实看到了一些有趣的行为。

例如,IP地址xxx.xxx.xxx.xxx(德国xxxxxx.de所拥有的范围之一)通过Google进入该网站。他们浏览了一下然后来到了页面http://site.com/xxxx/press+125.php他们在上午9:04:23发出了/download.php?id=/ZZ/n+aH55Y=(PDF格式)的请求。仅此一点并不是什么大问题。然而,有趣的是,服务器似乎一直专注于提供该请求。在日志中,请求首先在9:09:48到9:10:00之间完成。看起来用户必须已经厌倦了在此期间等待并再次请求文档两次。在09:14:47和09:15:00之间再次出现相同的请求,除了它是从上午9:04:43开始,比第一个请求晚20ms。然后它会弹出第三次,请求在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页面的代码,或者如果我们只是看到实时播放的某些服务器级别过载的证据,我还不确定。< / p>

公平地说,还有其他人在没有错误的情况下下载/download.php?id=/ZZ/n+aH55Y=(相同的PDF)。但是,有趣的是,多个进程似乎只发生在这个文件中,然后才会通过页面http://site.com/press+125.php进行访问。如果代码中存在某些问题导致系统触发占用服务器的多个下载请求,则需要进一步调查。

我不知道这个按+ 125.php是不是一个兔子洞,但是有一种奇怪的意识。

有什么想法吗?我完全没有想法。 Apache最大化了吗?这样的事情。

///DOWNLOAD.php
$file = new files();
$file->comparison_filter("id", "=", $id); //sql to load
if ($file->load()) {
    $file->serve(); 
}


//FILES
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;
            }
        }
}

3 个答案:

答案 0 :(得分:0)

使用CDN网络进行文件下载。他们将为您处理此问题,并为您提供带宽和可扩展性。不再锁定您的服务器。 http://www.reelseo.com/free-cdn-velocix/

答案 1 :(得分:0)

  1. 您是否分析过User-Agent和 HTTP请求中的Referer标头?
  2. 为什么不提供所有静态文件 从阿帕奇或你有什么?如果你想跟踪 下载统计信息,您可以从脚本重定向到静态文件。

答案 2 :(得分:0)

将'%D%X'添加到您的日志配置中 - 我希望这会回答您的许多问题。

下进行。