我正在尝试从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网站上,它被正确转换。
我正在尝试从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网站上,它被正确转换。
3条答案
按热度按时间wdebmtf21#
您可以从编码/解码中获取最后一条错误消息...
ax6ht2ek2#
即使这是一个老问题,可能这个答案可以帮助别人当看到同样的问题。
要处理此问题,请确保:
allow_url_fopen
打开,检查php.ini
文件。url
是有效的url。若要跳过有关传递变量的某些问题,可以使用http_build_query
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
放入数据,如下所示:希望有用,谢谢。
ilmyapht3#
这可能是无关紧要的,但在我的情况下,这解决了问题。如图所示,“file_get_contents”需要在CPanel的“PHP选择器”中打开“allow_url_fopen”。