我正在尝试设置一个php脚本,它将一些db条目返回给json文件。当我从另一个网站读取它时,该脚本似乎正在工作,但是,当我尝试从同一个文件夹中读取输出时(出于测试目的),它不起作用。 用于生成json的php代码:
header('Cache-Control: no-cache, must-revalidate');
header('Expires: Mon, 01 Jan 1996 00:00:00 GMT');
header('Content-type: application/json');
//snipped sql magic
echo json_encode($rows);
当我访问我网站上的页面时,它将返回预期的内容:
[{"id":96,"name":"name1"},{"id":39,"name":"name2"}]
到目前为止一切顺利。 但是,当我尝试在同一文件夹中的另一个php文件中读取此文件的输出时,如
$json = file_get_contents(urlencode('json.php')); //same result without the urlencode
echo var_dump($jsonData);
它将返回 php代码,而不是json文件的内容。 我不明白为什么会这样。 有什么想法吗?
答案 0 :(得分:3)
这是完全正常的。方法'file_get_contents'读取文件的内容,它不会执行它包含的php脚本。
你可以使用'include'或'curl'来做到这一点。
'include'将读取文件并将其包含的php脚本插入当前脚本。 'curl'会调用一个URL,所以它实际上会向你的服务器询问php文件。
当您在脚本中使用“标题”时,会说“卷曲”是您所需要的,但也许“包含”就足够了。
这是一个CURL示例:
$ch = curl_init("http://localhost/your/script.php");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, 0);
$json = json_decode(curl_exec($ch));
curl_close($ch);
更多信息:
file_get_contents : http://php.net/manual/fr/function.file-get-contents.php
include : http://php.net/manual/fr/function.include.php
curl : http://php.net/manual/fr/book.curl.php
答案 1 :(得分:0)
您只需在测试文件中返回json_encode
个数据。
// json_data.php
return json_encode(array(
'id' => 5,
'name' => 'John'
));
使用include
header('Content-Type: application/json');
$json = include 'json_data.php';
echo urlencode($json);
或者您甚至可以在urlencode
脚本中返回已经json_data.php
的数据。
return urlencode(json_encode(array(
'id' => 5,
'name' => 'John'
)));
希望,这会对你有帮助。