使用 PHP 进行非常大的上传

2022-08-30 12:57:35

我想允许将非常大的文件上传到我们的PHP应用程序中(数百兆 - 8 gigs)。但是,这有几个问题。

浏览器:

  • HTML上传的反馈很糟糕,我们需要轮询进度(这有点傻)或者根本没有显示任何反馈
  • Flash 上传器在开始上传之前将整个文件放入内存

服务器:

  • PHP迫使我们设置post_max_size,这可能导致容易利用的DOS攻击。我不想全局设置此设置。
  • 服务器还需要 POST 变量中存在一些其他变量,例如密钥。我们希望能够立即拒绝请求,而不是在上传整个文件后。

要求:

  • HTTP是必须的。
  • 我对客户端技术很灵活,只要它在浏览器中工作。
  • PHP不是必需的,如果有其他一些技术可以在Linux环境中很好地工作,那真是太酷了。

答案 1

upload_max_filesize可以基于每个目录进行设置;post_max_size也是如此

例如:

<Directory /uploadpath/>
  php_value upload_max_filesize 10G
  php_value post_max_size 10G
</IfModule>

答案 2

Python Handler?

使用 Python POST 处理程序而不是 PHP。从 PHP 应用生成一个唯一标识符,客户端可以将该标识符放入 HTTP 标头中。使用mod_python在整个 POST 正文传输之前拒绝或接受大型上载。

我认为 http://www.modpython.org/live/current/doc-html/dir-handlers-hph.html

允许您检查标头并拒绝其余的 POST 输入。我还没有尝试过,但可能是正确的路径?

从mod_python源来看,通过read()缓冲输入似乎允许对HTTP输入进行一次一次一次的评估。标题是第一位的。

https://svn.apache.org/repos/asf/quetzalcoatl/mod_python/trunk/src/filterobject.c


推荐