PHP 8.0更新后file_get_contents似乎不起作用

问题描述 投票:0回答:3

我不知道这是否与我的网络服务器从 7.4 到 PHP 8.0 的新更新有关,但这似乎是在更新后发生的。

我正在从另一个 URL 检索 JSON(并对其进行解码)。但更新后,

file_get_contents
什么也没返回 - 它是空的。

这是我尝试定位问题的方法:

$json = file_get_contents("https://www.example.com/json.php"); // not actual link
echo $json . "<br>";

$dataArray = json_decode($json);
echo var_dump($dataArray);

第一个回声只是空白,第二个回声是

NULL

这里可能出了什么问题?它位于页面顶部,因此在此之前没有任何代码。

编辑 我添加了代码来获取错误,这就是我得到的开始:

Warning: file_get_contents(https://www.example.com/json.php): Failed to open stream: HTTP request failed! HTTP/1.1 406 Not Acceptable

编辑2

建议的解决方案是我将

$ctx
变量添加到 file_get_contents 中,但我仍然遇到相同的错误。

$ctx = stream_context_create(['http' => ['protocol_version' => '1.0']]);
echo file_get_contents('https://LINKHERE.com', false, $ctx);
php file-get-contents php-8
3个回答
0
投票

我认为这是因为它生成了 php 错误并且您的错误报告未打开。

对于第一行,我测试后出现错误:

PHP Warning:  file_get_contents(https://www.example.com/json.php): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
 in /home/genie/fileget.php on line 2

但是,如果我关闭错误报告,我会得到与您所描述的相同的结果。

您应该检查错误报告设置并打开错误报告并显示错误。

第一个 json 没有得到任何内容的原因是它的值是 false。如果你 var_dump 它,你会得到一个 false,因为你想要包含的页面有一个 404 标头。

默认情况下 file_get_contents 仅返回 HTTP 200 响应的内容。


0
投票

我不得不使用 cURL 而不是

file_get_contents
,因为 HTTP/1.1 不知何故使得
file_get_contents
的使用变得不可能。感谢所有花时间帮助我解决这个问题的人!


0
投票

检查您的 PHP.ini 是否处于活动状态:

fopen_url
allow_url_fopen

如果您有主机,请转到主机设置并尝试编辑 PHP.ini 或寻求帮助。

就我而言,升级到 PHP 8 后该标志是否被禁用。

© www.soinside.com 2019 - 2024. All rights reserved.