如果 POST 正文超过 ~16000 个字符,则 file_get_contents( "php://input" ) 为空



我有一个应用程序,它向Apache共享主机发送相对较大的POST请求。

在服务器上,有一个.php文件,其中包含

file_get_contents("php://input")

这应该读取 POST 原始正文。只要 POST 正文的长度小于 ~16000 个字符,它就可以工作。如果有更多,上面的代码段将返回一个空字符串。

我想把整个身体都归还,不管它的长度有多长。

  • 默认情况下,据说服务器的php.ini中有一个post_max_size = 64M设置。自己手动设置并不能缓解问题。

  • 客户端代码始终正常工作。内容长度标头也设置正确。

  • 通过 HTML 表单发送 POST 并使用 $_POST['content'] 服务器端访问它的行为方式完全相同。

问题可能与Web服务器有关。 您可以尝试提高 Web 服务器软件的正文限制。 例如在阿帕奇:

LimitRequestBody 

在 Nginx 中:

client_max_body_size

解决方案是在公共根目录中创建一个名为tmp的空文件夹。 在大多数情况下,它很可能会自动创建(如果需要的话(,但是我相信这家托管公司的配置存在缺陷。

尝试在脚本顶部一直添加以下内容:

<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);

您很可能会收到由于错误被禁用而看不到的错误。

您也可以尝试从 PHP 配置中删除--with-curlwrapper并重建它。 file_get_contents返回空字符串

最新更新