什么可以使$_POST变量无效


What can nullify $_POST variable?

我正在使用http post请求从一个主机传输文件到另一个主机。接收主机运行apache和php板载。该请求包含多部分/表单数据,由php脚本(cURL)执行。共有86个文件,总大小约为20Mb。问题是接收php脚本得到空$_POST数组。我重新配置了发送脚本,因此它在循环中发送相同的请求,但在每次迭代中从数据收集中删除一个文件。当删除36个文件(总大小约12Mb)时,接收脚本接受数据,$_POST变量填充得很好。会出什么问题呢?我已经检查了所有相关的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不包含任何有用的内容。也许还有别的来源可以看?

不能在运行时以每个目录为基础设置post_max_size值。尽管您的phpinfo()将反映更改,但在处理表单时它将被忽略,因此将恢复到默认的8MB。

你的文件的总大小是20MB,但是当你删除约12MB的文件时,脚本可以工作。

20 - 12 = 8MB // Therefore the script works

唯一的解决方案是在php.ini中设置值,或者当您使用Apache时,您可以在http.conf.htaccess文件中设置值。

我也有这个问题,虽然它是在Windows上运行IIS。然而,问题还是一样的。有关此问题的更多信息,请参阅此主题。

事实证明,在Windows上,你只能设置ini指令每个目录标记PHP_INI_USER。不幸的是,upload_max_filesize和post_max_size都是PHP_INI_PERDIR。PHP文档http://php.net/manual/en/configuration.changes.php

该目录的设置对于任何正在运行的脚本都是活动的从这个目录或它的任何子目录。下的值键应该包含PHP配置指令的名称和字符串值。不解析值中的PHP常量。然而,只有PHP_INI_USER中可变的配置值才能设置此值方法,PHP_INI_PERDIR值不能。

所以即使Plesk有一个接口来改变这些指令,和即使phpinfo()发现了它们,它们也不会改变实际最大上传大小。Plesk应该不允许您更改这些Windows和phpinfo()不应该报告更改,但是您可以做。

检查是否安装了Suhosin扩展。它有几个设置来限制您可以通过POST、GET和REQUEST接收的数据量。此外,它可以通过设置suhosin.upload.max_uploads来限制上传的文件数量,默认为20。

当设置执行操作时,POST数组通常被截断。

另外,如果您正在上传文件,请检查$_FILES数组,而不是$_POST