Json_decode,file_get_contents var_dump返回NULL

时间:2016-04-21 13:03:34

标签: php json nginx

我正在尝试使用json数据从php生成的文件中获取文件内容。

Json已经被jsonlint.com网站检查过了。这是有效的。

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

Nginx不会显示任何错误。

为什么它不起作用? Json生成器在外部服务器上。 当我将其粘贴到http://php.fnlist.com/php/json_decode网站上时,它已正确转换。

2 个答案:

答案 0 :(得分:1)

答案 1 :(得分:0)

尽管这是一个古老的问题,但在看到同样的问题时,这个答案可能会对某人有所帮助。

要处理此问题,请确保:

  1. allow_url_fopen已开启,请检入php.ini文件。
  2. url是有效的网址。要跳过关于传递变量的一些问题,您可以使用http_build_query
  3. json的返回有效。您可以使用jsonlint.com
  4. 检查退货是否有效
  5. 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 ] ]);

  6. 最后通过调用file_get_contents来放置数据:

    $getData = file_get_contents($url, false, $context);
    $results = json_decode($getData, TRUE);
    

    希望有用,谢谢。