嗨,我对 PHP 很陌生,我已经为要上传到我的服务器的非常大的 csv 文件创建了一个表单。有人向我提到,由于上传文件太大,浏览器会超时,这是真的吗?如果是这样,可以预防吗?
谢谢你的帮助!
如果它们的值太小,有一些配置指令可能会导致大型上传失败:
PHP
max_input_time
允许脚本解析输入数据(如 POST、GET 和文件上传)的最长时间(以秒为单位)upload_max_filesize
上传文件的最大大小。post_max_size
允许的帖子数据的最大大小。阿帕奇
TimeOut
服务器在请求失败之前等待某些事件的时间LimitRequestBody
限制从客户端发送的 HTTP 请求正文的总大小可能还有更多。
解决 php 中对大文件上传处理不当的一个好方法是使用像JUpload这样的上传器,它会在发送文件之前将文件分成块。这也有利于您的用户在上传时获得适当的进度反馈,并且他们可以一次上传多个文件。
我可以使用以下设置解决此问题,您可以使用不同的值,但您明白了:
对于我的服务器,我将这些行放在脚本目录内的“.user.ini”文件中,您的服务器可能会寻找不同的文件,如果您在服务器上执行 phpinfo('user_ini.filename') 它将吐出您需要将值放入的文件
max_execution_time = 1800
max_input_time = -1
post_max_size = 100M
upload_max_filesize = 100M
memory_limit = 256M
上传非常大的文件时,您必须更改 4 个配置变量:
upload_max_filesize
post_max_size
memory_limit
time_limit
使用 set_time_limit() 可以在运行时增加时间限制。
默认情况下,允许脚本运行 30 秒。您可以使用set_time_limit() 函数来改变它。此外,如果您的用户需要上传大文件,您需要更改 php.ini 文件中的 post_max_size 和/或 upload_max_filesize 值。
此外,如果您只想全局扩展超时限制,您可以在 php.ini 中更改 max-execution-time。
是的,它是真实的。文件上传是通过 POST 请求完成的,请求通常会超时。您应该能够重新配置您的环境以获得更长的请求超时。
不仅仅是超时会导致问题。可以上传的文件的最大大小有一些限制。这些限制可以在 php.ini 文件中更改:
post_max_size
upload_max_filesize memory_limit
查看http://uk.php.net/ini.core了解详情。
我的回答与您的原始问题没有直接关系,但是如果您的 PHP 脚本前面有反向代理负载均衡器,负载均衡器可能会超时或阻止大量上传。如果您支持文件上传,请务必检查负载均衡器的配置。就像 PHP 一样,大多数负载均衡器的默认上传设置都非常小。
如果更改上述任何参数似乎没有任何区别,则可能是某处的 html 表单包含名称 MAX_FILE_SIZE 作为隐藏字段。
<input type="hidden" name="MAX_FILE_SIZE" value="10000000">
在上面的例子中,任何超过 10MB 的文件都不会被上传。