php json returning bool(false)

2019-01-29 02:58发布

Any thoughts as to why the following is not working.

$request_url = "someurl?myId=$id"; //returns feed like above

$json = file_get_contents($request_url, true); //getting the file content

$decode = json_decode($json, true);

var_dump($json);

When I paste the request_url into a browser I get back the json data but if I try in php the var_dump is simply bool(false); Any ideas??

Update and fix OK guys thanks for all the help. Ye helped me track this one down. It turned out to be the php.ini is configured to disallow the opening of urls so the file_get_contents would not work. I found the following handy function mentioned on various sites and used it so its sorted. Here is the method I used in case it helps someone else.

function file_get_contents_curl($url) {
$ch = curl_init();

curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //Set curl to return the data instead of printing it to the browser.
curl_setopt($ch, CURLOPT_URL, $url);

$data = curl_exec($ch);
curl_close($ch);

return $data;
}

3条回答
一夜七次
2楼-- · 2019-01-29 03:09

I replicated your problem and I observe bool(false) when the ajax url is wrong (not found). Make sure your "someurl" is valid.

If the JSON is invalid, your script would still print it correctly. If the url returns nothing you's still observe 'string(0) ""'

The issue is the invalid url.

查看更多
爷、活的狠高调
3楼-- · 2019-01-29 03:14

According to the PHP documentation, file_get_contents returns false on failure. This means that the url is not valid or can not be accessed from php.

If you are trying this from a server, be sure that your firewall is not blocking this outgoing traffic.

查看更多
可以哭但决不认输i
4楼-- · 2019-01-29 03:18

maybe the response's charset of $request_url is not 'utf-8' or 'ansi'.

查看更多
登录 后发表回答