我正在使用http post请求从一个主机向另一个主机传输文件。 接收主机运行apache与板载PHP。 该请求包含multipart / form-data,并通过php脚本(cURL)执行。 共有86个文件,总大小约为20Mb。 问题是接收php脚本gots空$ _POST数组。 我重新配置了发送脚本,因此它在循环中发送相同的请求,但在每次迭代时从数据收集中删除一个文件。当删除36个文件(总大小~12Mb)时,接收脚本接受数据,$ _POST变量填充良好。 有什么不对? 我已经查看了所有resposible php.ini参数,因此它们包含合理的值。
ini_set("post_max_size","510M");
ini_set("memory_limit","400M");
ini_set("upload_max_filesize","510M");
ini_set("max_file_uploads","500");
有没有办法调查原因?我的意思是,error_log不包含任何有用的东西。也许有另一个来源可以看到?
答案 0 :(得分:3)
无法在运行时基于每个目录设置post_max_size
值。即使您的phpinfo()
将反映更改,但在处理表单时它将被忽略,因此将恢复为默认值8MB。
事实证明,文件的总大小为20MB,但当您删除~12MB的文件时,脚本可以正常工作。
20 - 12 = 8MB // Therefore the script works
唯一的解决方案是在php.ini
中设置值,或者在使用Apache时,您可以在http.conf
或.htaccess
文件中设置值。 / p>
我之前也遇到过这个问题,虽然它是在运行IIS的Windows上运行的。但问题仍然存在。有关该问题的详细信息,请参阅此thread。
事实证明,在Windows上,您只能设置ini指令 每个目录标记为PHP_INI_USER。不幸的是,upload_max_filesize 和post_max_size都是PHP_INI_PERDIR。来自PHP文档 http://php.net/manual/en/configuration.changes.php
对于运行的任何脚本,目录的设置都将处于活动状态 从此目录或其任何子目录。下的价值观 key应该具有PHP配置指令的名称和 字符串值。不解析值中的PHP常量。然而, 只能在PHP_INI_USER中设置可更改的配置值 方式,PHP_INI_PERDIR值不能。
所以尽管Plesk有一个改变这些指令的界面,并且 即使phpinfo()接受了它们,它们也无法改变它们 实际最大上传大小。 Plesk不允许你改变那些 Windows和phpinfo()不应报告更改,但您可以做什么 做。
答案 1 :(得分:1)
检查您是否安装了Suhosin扩展程序。它有几个设置限制您可以通过POST,GET和REQUEST接收的数据量。此外,它可以限制通过设置suhosin.upload.max_uploads
上传的文件数量,默认为20。
当设置执行操作时,POST数组通常会被截断。
此外,如果您要上传文件,请检查$_FILES
数组,而不是$_POST
。