file_get_contents('php://input') 不工作。空 - NULL
file_get_contents('php://input') not working. Empty - NULL
我在过去的 12 小时里遇到了这个问题,我阅读了大约 50 篇文章,这里有 50 个问题,我无法解决它。我会更精确,我希望其他人也能得到解决方案。
问题: 我在 namech**** 中有一个托管帐户,还有一个本地服务器。 Linux 那里 Xampp Windows 这只适用于我的本地服务器。
test.php:
<?php
$data = json_decode(file_get_contents("php://input"), true);
var_dump($data);
?>
post请求是:
POST /test.php HTTP/1.1
Host: myweb.io
Content-Type: application/json
Content-Length: 77
{
"test": "product/created",
"other": "https://google.com/"
}
我使用 REQBIN 来测试 POST 请求。
这是我托管中的回复:
HTTP/1.1 200 OK
Date: Sun, 03 May 2020 17:04:33 GMT
Server: Apache
X-Powered-By: PHP/7.4.5
Content-Encoding: gzip
Vary: Accept-Encoding
Transfer-Encoding: chunked
Content-Type: text/html; charset=UTF-8
NULL
这是在我的本地环境中使用 XAMPP
的正确响应
HTTP/1.1 200 OK
Date: Sun, 03 May 2020 17:15:19 GMT
Server: Apache/2.4.41 (Win64) OpenSSL/1.1.1c PHP/7.4.3
X-Powered-By: PHP/7.4.3
Content-Length: 94
Content-Type: text/html; charset=UTF-8
Array
(
[test] => product/created
[other] => https://google.com/
)
我尝试过的事情:
- 将 allow_url_fopen 设置为 1 或 0。
- 降级 PHP 版本(已尝试 7.1、2、3、4)
- 卸载 SSL 证书
- 数以百万计的东西在PHP.INI
- 删除 htaccess
- 删除一些 php 模块/扩展
更新:
- 文件是独立的,检查函数只执行一次
- 我检查是否没有重定向。 (Htaccess、cPanel 设置)
我修复了它,不知道如何解决,但我认为解决方案是:
完全删除我的 htaccess,没有重定向(http 到 https)。
不要使用 reqbin 进行测试,使用 php 纯代码或 PostMan 进行测试。
信不信由你:
改变:
RewriteRule ^ /%1 [NC,L,R]
至
RewriteRule ^ %1 [NC,L,R]
然后回到
RewriteRule ^ /%1 [NC,L,R]
同样
重写规则 ^(.*?)/?$ /$1.php [NC,L]
至
RewriteRule ^(.*?)/?$ $1.php [NC,L]
然后回到
RewriteRule ^(.*?)/?$ /$1.php [NC,L]
似乎解决了!
我也有这个问题,我发现我的地址是http://
而不是https://
。
现在我有了 file_get_contents("php://input")
希望这能解决您的问题。
我遇到了同样的问题;显然 HTTP 重定向(例如 301 到 https)禁止数据一起重定向。
确保没有重定向。
我在过去的 12 小时里遇到了这个问题,我阅读了大约 50 篇文章,这里有 50 个问题,我无法解决它。我会更精确,我希望其他人也能得到解决方案。
问题: 我在 namech**** 中有一个托管帐户,还有一个本地服务器。 Linux 那里 Xampp Windows 这只适用于我的本地服务器。
test.php:
<?php
$data = json_decode(file_get_contents("php://input"), true);
var_dump($data);
?>
post请求是:
POST /test.php HTTP/1.1
Host: myweb.io
Content-Type: application/json
Content-Length: 77
{
"test": "product/created",
"other": "https://google.com/"
}
我使用 REQBIN 来测试 POST 请求。
这是我托管中的回复:
HTTP/1.1 200 OK
Date: Sun, 03 May 2020 17:04:33 GMT
Server: Apache
X-Powered-By: PHP/7.4.5
Content-Encoding: gzip
Vary: Accept-Encoding
Transfer-Encoding: chunked
Content-Type: text/html; charset=UTF-8
NULL
这是在我的本地环境中使用 XAMPP
的正确响应HTTP/1.1 200 OK
Date: Sun, 03 May 2020 17:15:19 GMT
Server: Apache/2.4.41 (Win64) OpenSSL/1.1.1c PHP/7.4.3
X-Powered-By: PHP/7.4.3
Content-Length: 94
Content-Type: text/html; charset=UTF-8
Array
(
[test] => product/created
[other] => https://google.com/
)
我尝试过的事情:
- 将 allow_url_fopen 设置为 1 或 0。
- 降级 PHP 版本(已尝试 7.1、2、3、4)
- 卸载 SSL 证书
- 数以百万计的东西在PHP.INI
- 删除 htaccess
- 删除一些 php 模块/扩展 更新:
- 文件是独立的,检查函数只执行一次
- 我检查是否没有重定向。 (Htaccess、cPanel 设置)
我修复了它,不知道如何解决,但我认为解决方案是: 完全删除我的 htaccess,没有重定向(http 到 https)。 不要使用 reqbin 进行测试,使用 php 纯代码或 PostMan 进行测试。
信不信由你:
改变: RewriteRule ^ /%1 [NC,L,R]
至
RewriteRule ^ %1 [NC,L,R]
然后回到
RewriteRule ^ /%1 [NC,L,R]
同样 重写规则 ^(.*?)/?$ /$1.php [NC,L]
至
RewriteRule ^(.*?)/?$ $1.php [NC,L]
然后回到
RewriteRule ^(.*?)/?$ /$1.php [NC,L]
似乎解决了!
我也有这个问题,我发现我的地址是http://
而不是https://
。
现在我有了 file_get_contents("php://input")
希望这能解决您的问题。
我遇到了同样的问题;显然 HTTP 重定向(例如 301 到 https)禁止数据一起重定向。
确保没有重定向。