我从这里得到空(空白页):
api.php代码:
$json_data = array(
'status' => 'failed',
'version' => '0.0.5'
);
header("Content-type: application/json");
echo json_encode($json_data, JSON_PRETTY_PRINT);
getapi.php代码:
$json_file = file_get_contents("http://domain.com/api.php");
$json_data = json_decode($json_file);
print_r($json_data);
$json_file = file_get_contents("http://domain.com/api.php");
echo $json_file; //{"status":"failed","version":"0.0.5"}
$json_data = json_decode($json_file);
print_r($json_data); // blank page
答案 0 :(得分:2)
问题可能在于您的PHP.ini文件和PHP设置不允许您访问远程URL。
您要查找的设置为allow_url_fopen
。
你有两种方法可以绕过它而不用改变php.ini,其中一种是使用fsockopen()
,另一种是使用cURL。
如果您可以访问php.ini文件,我建议您进行编辑。
答案 1 :(得分:1)
我想提交的另一个答案是尝试调试你的json字符串,因为你已经告诉我们你的file_get_contents()
我在json_last_error()
echo 'Decoding: ' . $string;
json_decode($json_file);
switch (json_last_error()) {
case JSON_ERROR_NONE:
echo ' - No errors';
break;
case JSON_ERROR_DEPTH:
echo ' - Maximum stack depth exceeded';
break;
case JSON_ERROR_STATE_MISMATCH:
echo ' - Underflow or the modes mismatch';
break;
case JSON_ERROR_CTRL_CHAR:
echo ' - Unexpected control character found';
break;
case JSON_ERROR_SYNTAX:
echo ' - Syntax error, malformed JSON';
break;
case JSON_ERROR_UTF8:
echo ' - Malformed UTF-8 characters, possibly incorrectly encoded';
break;
default:
echo ' - Unknown error';
break;
}
echo PHP_EOL;
看起来你的角色设置有问题。尝试强制utf-8如下。
更改:
header("Content-type: application/json");
要:
header('Content-Type: application/json; charset=utf-8');
答案 2 :(得分:0)
首先,您应该确保您的api.php可以通过HTTP获得。 在某些浏览器中打开URL http://domain.com/api.php进行检查,您必须看到可用的响应。 如果您仍然看到空白页面,那么可能您的网络服务器未正确配置或api.php文件存储在非公共文件夹中。 public_html或web。 运行以下命令:
$ php -i|grep 'allow_url_fopen'
allow_url_fopen => On => On
另外请检查您的PHP配置,选项allow-url-fopen应设置为true。 另请注意自PHP 5.4.0起可用的常量JSON_PRETTY_PRINT
下一个代码段将帮助您排除故障,将其置于脚本的顶部,但不要忘记在以下情况后将其删除:
error_reporting(E_ALL);
ini_set('display_errors', true);
ini_set('display_startup_errors', true);
答案 3 :(得分:0)
尝试使用上面的函数而不是json_decode,它包含内部的utf8修复
function parseJson($content, $options = true)
{
$content = fixUtf8String(trim($content));
$decoded = json_decode(utf8_decode($content), $options);
if (($jsonLastErr = json_last_error()) != JSON_ERROR_NONE) {
switch ($jsonLastErr) {
case JSON_ERROR_DEPTH:
throw new Exception('JSON Decoding failed: Maximum stack depth exceeded');
case JSON_ERROR_CTRL_CHAR:
throw new Exception('JSON Decoding failed: Unexpected control character found');
case JSON_ERROR_SYNTAX:
throw new Exception('JSON Decoding failed: Syntax error');
default:
throw new Exception('JSON Decoding failed');
}
}
return $decoded;
}
function fixUtf8String($s)
{
if (empty($s)) {
return $s;
}
$s = preg_match_all(
"#[\x09\x0A\x0D\x20-\x7E]|
[\xC2-\xDF][\x80-\xBF]|
\xE0[\xA0-\xBF][\x80-\xBF]|
[\xE1-\xEC\xEE\xEF][\x80-\xBF]{2}|
\xED[\x80-\x9F][\x80-\xBF]#x", $s, $m
);
return implode("", $m[0]);
}