0

我正在尝试设置一个将一些 db 条目返回到 json 文件的 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 文件的内容。我不明白为什么会这样。有什么想法吗?

4

2 回答 2

3

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

您可以使用“包含”或“卷曲”来做到这一点。

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

更多信息:

于 2013-10-02T08:12:11.280 回答
0

您只需json_encode在测试文件中返回 ed 数据。

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

希望对你有帮助。

于 2013-10-02T08:25:36.063 回答