2013-10-02 44 views
0

我想设置一个PHP脚本,返回一些DB条目到JSON文件。当我从另一个网站上读取该脚本时,该脚本似乎正在工作,但是,当我尝试从同一文件夹读取输出时(出于测试目的),它不起作用。用于生成JSON PHP代码:PHP到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文件的内容。 我不明白这是为什么。 有什么想法?

回答

3

这是完全正常的。方法'file_get_contents'读取文件的内容,并且不会执行它包含的php脚本。

您可以使用'include'或'curl'来做到这一点。

'include'将读取一个文件并将其包含的php脚本插入到当前脚本中。 'curl'会调用一个URL,所以它实际上会询问你的服务器的php文件。因为你在脚本里面使用'header',所以'curl'就是你需要的,但'include'就足够了。

这里是卷曲例如:

$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 
+0

好的,谢谢。我现在明白了。我今天学到了一些东西,所以这一天没有浪费:) 包括做的伎俩。 – bolvo

+0

伟大:)然后请将我的答案标记为已接受的解决方案。祝你好运。 – Scalpweb

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

或者这些数据,你甚至可以在json_data.php脚本已经返回urlencode版数据。

return urlencode(json_encode(array(
    'id' => 5, 
    'name' => 'John' 
))); 

希望,这会帮助你。

+0

这将不再适用于像XHR这样的远距离通话。 – Scalpweb

+0

同意这一点,但这种解决方案很简单,并且可以正确地用于'从同一文件夹读取输出(用于测试目的)'。 –