我不知道这是否与我的网络服务器从 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 错误并且您的错误报告未打开。
对于第一行,我测试后出现错误:
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 响应的内容。
我不得不使用 cURL 而不是
file_get_contents
,因为 HTTP/1.1 不知何故使得 file_get_contents
的使用变得不可能。感谢所有花时间帮助我解决这个问题的人!
检查您的 PHP.ini 是否处于活动状态:
fopen_url
或 allow_url_fopen
。
如果您有主机,请转到主机设置并尝试编辑 PHP.ini 或寻求帮助。
就我而言,升级到 PHP 8 后该标志是否被禁用。