【问题标题】:Any documentation about how Apache handles file uploads?有关 Apache 如何处理文件上传的任何文档?
【发布时间】:2011-05-10 07:36:42
【问题描述】:

我花了几个小时在谷歌上搜索,以及搜索 Apache 网站,但我找不到任何关于 Apache 如何处理文件上传的文档——尤其是大文件。我读过anecdotalreports 在上传完成之前不涉及PHP,这是我所期望的。但就 Apache 在上传过程中所做的事情而言,我找不到任何东西。

我热衷于文档的原因是 Apache 将上传完全存储在内存中,而不是将它们流式传输到磁盘。 httpd 将使用我正在使用的服务器上的每个可用内存字节,直到它崩溃。通常,消耗的物理内存量是上传文件大小的 3 倍,并且增加了 5 MB/s 附近(远不及我的上传速度)。

我已经在我正在使用的另一个 LAMP 堆栈上测试了相同的请求,并且在整个上传过程中,Apache 内存使用量根本没有变化。

谁能向我解释 Apache 如何在两台不同的服务器上以如此不同的方式处理相同的上传?任何想法都非常感谢。

【问题讨论】:

  • 您是否专门搜索过 FileUploads?也许你应该看看 Apache 通常如何处理传入的 POST 请求。
  • @james-black 不,我没有看到...非常有帮助。

标签: php file-upload apache


【解决方案1】:

从技术上讲,PHP 代表 Apache 处理上传,并在 ram 中缓冲文件直到完成。但是,在上传完成(或中止)之前,您的脚本不会获得控制权。除非必须,否则 Apache 本身不会缓冲到磁盘。把它想象成一个不可见的“handle_upload()”函数调用,透明地插入到你的脚本中。

回到“一切都是 cgi 脚本”时代,当 PHP 等语言解释器没有嵌入 Web 服务器进程时,POST 数据通过标准输入发送到 CGI 脚本文件将通过 Apache 直接传递到 CGI 进程并且可以在输入时逐字节读取。

【讨论】:

    【解决方案2】:

    答案令人不满意。我从来没有找到任何文档。

    我继续在黑暗中四处寻找,最后偶然发现了一个成功的mod_fcgid 升级(从 2.2 到 2.3.6)。也许 2.2 中存在错误。

    内存使用量在 2.3.6 中仍然上升,但远没有那么显着。大约 100 MB 的文件只有几兆字节。 (但是,当上传完成并移动文件时,内存使用量会立即飙升约 100-200 MB,但随后似乎会立即释放。)

    【讨论】:

      【解决方案3】:

      这可能会对您有所帮助,因为 WAMP 服务器中包含 Apache。

      http://www.wampserver.com/phorum/read.php?2,39439

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-01-12
        • 2010-12-30
        • 1970-01-01
        • 2016-09-08
        • 2010-09-14
        • 2017-02-18
        • 1970-01-01
        • 2018-02-08
        相关资源
        最近更新 更多