我在将大文件上传到服务器上的PHP脚本时遇到问题。除非上传更大的文件,否则一切正常。上传大小约为170MB(大约需要40-50分钟)的文件时,它已经工作过一次,但在其他时间都失败了。大约420MB(大约需要80 - 110分钟)的文件尚未成功上传。奇怪的是我在PHP日志或Apache日志中没有错误,当接收和处理文件时,会话只是空的。我有所有推荐的设置
in PHP app:
ini_set('max_execution_time', '8640');// 24h
ini_set("session.cookie_lifetime", '0'); // 24h
ini_set("session.gc_maxlifetime", '8640'); // 24h
ini_set("default_socket_timeout", '8640'); // 24h
ini_set("error_reporting", "true");
error_reporting(E_ALL|E_STRCT);
in .htaccess
php_value memory_limit 4194304000
php_value post_max_size 3145728000
php_value upload_max_filesize 3145728000
php_value max_input_time 8640
我在AWS上运行ELB背后的单个EC2微实例。在实例上,我使用Apache 2.4.6,PHP 5.5.3运行Ubuntu。文件通过blueimp jQuery-File-Upload插件(http://blueimp.github.io/jQuery-File-Upload/)上传。该插件声称应该可以上传高达4GB的内容。该插件通过AJAX执行上传,不知道它是否与问题有关。
即使我没有通过ELB访问实例,换句话说,通过EC2实例的IP访问应用程序,我也会收到此错误。
在localhost WAMP服务器上执行相同的操作时,我不会遇到大文件的任何问题。
我在ajax请求启动之前打印出客户端IP(这是PHP错误日志中每个条目打印的客户端值),然后在完成后再次打印并发现端口不同,
Before upload start
[client 105.224.7.32:53623]
After upload complete
[client 105.224.7.32:53633]
我不知道错误是否与上传时间,上传大小,内存限制,AWS或甚至是完全不相关的内容有关,因为我没有收到任何错误消息。
这可能与错误有关吗?任何帮助或指示将不胜感激。
答案 0 :(得分:0)
这似乎与浏览器的会话超时有关。我添加了从执行文件上传的浏览器每隔60秒ping服务器的功能,并修复了错误。我猜不同的端口(在会话似乎在服务器上丢失之后)是由于在会话到期后从浏览器发送了新的连接请求。我认为这导致PHP为请求创建一个新会话
答案 1 :(得分:0)
我也遇到过类似的问题,但这是由于SSL超时导致的:解决方案是在站点的DIRECTORY段中的.conf文件中添加“ SSLRenegBufferSize”行(具有足够的大小)。 Apache2。