首页 > 解决方案 > eval() 和 file_get_contents() .. 不同的结果

问题描述

我正在尝试将 eval() 与 json_decode(file_get_contents()) 一起使用,并且在对值进行评估和硬编码时得到了不同的结果。我只是错过了一些简单的东西吗?

我使用的是 PHP 版本 5.3.24,目前无法更改。如果对 eval() 支持至关重要,我可以开始对其进行更改。我没有发现任何表明我在当前的 PHP 实现中没有 eval() 支持的东西。

当我运行 Example1('key') 时,我从 eval() 函数返回 NULL。当我运行 Example2('key') 时,我得到一个基于 json 数据的数组,如下所示:

{ key_list: [ { data1_list: [ { subkey1: "data", subkey2: 0 }, .. ], .. ] }

这是示例 1():

function Example1($key) {

    $endPoint = 'http:'.'//some.website.com/json/'.$key;

    $evalCommand = sprintf('json_decode(file_get_contents("%s"))->%s_list[0];', $endPoint, $key);

    echo '$evalCommand = |'.$evalCommand.'|<br />';

    $resultsArray = eval($evalCommand);

    return $resultsArray;
}

这是示例 2():

function Example2($key) {

    $endPoint = 'http:'.'//some.website.com/json/'.$key;

    $resultsArray = json_decode(file_get_contents($endPoint))->key_list[0];

    return $resultsArray;
}

标签: phpjsonevalfile-get-contents

解决方案


而不是使用eval,它可能能够使用更标准的代码并使用动态对象访问。

URL 的名称是可以的,但是对于该字段,有一些杂耍。这将名称设置为$field,但我无法让它在一行中完成该部分和数组部分。在这里它用于->$field获取数据并且[0]返回...

function Example2($key) {
    $endPoint = 'http://some.website.com/json/'.$key;

    $field = $key.'_list';
    $resultsArray = json_decode(file_get_contents($endPoint))->$field;

    return $resultsArray[0];
}

推荐阅读