【问题标题】:file_get_contents("php://input") is empty if the POST body is above ~16 000 characters如果 POST 正文超过 ~16 000 个字符,则 file_get_contents("php://input") 为空
【发布时间】:2020-01-19 04:29:35
【问题描述】:

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

在服务器上有一个.php 文件

file_get_contents("php://input")

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

我想让整个身体返回,不管它的长度。

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

  • 客户端代码始终正常工作。 Content-Length 标头也设置正确。

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

【问题讨论】:

  • 谁托管服务器?托管公司是否设置了您无法在代码中更改的限制?

标签: php


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    尝试在脚本之上一直添加:

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

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

    您也可以尝试从 PHP 配置中删除 --with-curlwrapper 并重新构建它。 file_get_contents returns empty string

    【讨论】:

      【解决方案3】:

      问题可能出在 Web 服务器上。 您可以尝试提高 Web 服务器软件的正文限制。 例如在 Apache 中:

      LimitRequestBody 
      

      在 Nginx 中:

      client_max_body_size
      

      【讨论】:

        猜你喜欢
        • 2023-04-06
        • 2016-06-02
        • 2015-01-24
        • 2013-10-09
        • 2018-08-08
        • 1970-01-01
        • 2018-06-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多