【问题标题】:php to json: reading file returns php codephp转json:读取文件返回php代码
【发布时间】:2013-10-02 08:09:21
【问题描述】:

我正在尝试设置一个将一些 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 文件的内容。 我不明白这是为什么。 有什么想法吗?

【问题讨论】:

    标签: php json


    【解决方案1】:

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

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

    'include' 将读取一个文件并将其包含的 php 脚本插入到当前脚本中。 'curl' 将调用一个 URL,因此它实际上会向您的服务器询问 php 文件。

    当您在脚本中使用“header”时,它会说“curl”是您需要的,但也许“include”就足够了。

    这是一个 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);
    

    更多信息:

    【讨论】:

    • 好的,谢谢。我现在明白了。我今天学到了一些东西,所以这一天并没有浪费:) include 成功了。
    【解决方案2】:

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

    // 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 脚本中返回已经urlencodeed 的数据。

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

    希望对你有所帮助。

    【讨论】:

    • 这对于像 XHR 这样的远程呼叫将不再起作用。
    • 同意这一点,但这个解决方案很简单,完全适用于read the output from the same folder (for testing purposes)
    猜你喜欢
    • 1970-01-01
    • 2016-02-26
    • 1970-01-01
    • 2014-09-14
    • 2011-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-21
    相关资源
    最近更新 更多