什么可以使$ _POST变量无效?

时间:2013-01-14 09:09:54

标签: php apache post curl multipartform-data

我正在使用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不包含任何有用的东西。也许有另一个来源可以看到?

2 个答案:

答案 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