php json returning bool(false)

2019-01-29 03:09发布

问题:

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;
}

回答1:

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.



回答2:

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



回答3:

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.