php JSON解码、文件获取内容和变量转储返回NULL

plupiseo  于 2022-12-21  发布在  PHP
关注(0)|答案(3)|浏览(139)

我正在尝试从php生成的带有json数据的文件中获取文件内容。
Json已经过jsonlint.com站点检查。它是有效的。

$result = file_get_contents("url"); 
var_dump(json_decode($result,true));

Nginx没有显示任何错误。
为什么它不工作?JSON生成器是在外部服务器上。当我粘贴到http://php.fnlist.com/php/json_decode网站上,它被正确转换。

ax6ht2ek

ax6ht2ek2#

即使这是一个老问题,可能这个答案可以帮助别人当看到同样的问题。
要处理此问题,请确保:

  1. allow_url_fopen打开,检查php.ini文件。
  2. url是有效的url。若要跳过有关传递变量的某些问题,可以使用http_build_query
  3. json返回有效,可以用jsonlint.com检查返回是否有效
  4. stream_context已经设置好,所以file_get_contents知道如何处理请求。即使我们通过HTTPS传输数据,我们也需要使用http context。我们将method设置为PUT,将Content-type设置为application/json,将Accept设置为application/json,将Connection设置为close,将Content-length设置为JSON字符串的长度。我们通过HTTP1.1将此数据放置,因此将设置为1.1。我们在请求主体中发送JSON,因此在内容中设置此值。由于我们使用HTTPS,因此需要配置ssl设置。
    $context = stream_context_create([ 'http' => [ 'method' => 'PUT', 'header' => "Content-type: application/json\r\n" . "Accept: application/json\r\n" . "Connection: close\r\n" . "Content-length: " . strlen($json_data) . "\r\n", 'protocol_version' => 1.1, 'content' => $json_data ], 'ssl' => [ 'verify_peer' => false, 'verify_peer_name' => false ] ]);
    最后,通过调用file_get_contents放入数据,如下所示:
$getData = file_get_contents($url, false, $context);
$results = json_decode($getData, TRUE);

希望有用,谢谢。

ilmyapht

ilmyapht3#

这可能是无关紧要的,但在我的情况下,这解决了问题。如图所示,“file_get_contents”需要在CPanel的“PHP选择器”中打开“allow_url_fopen”。

相关问题