用json包含文件

时间:2014-02-26 19:37:18

标签: php json

我有这段代码:

    <?php

set_time_limit(0);

// arquivo cujo conteúdo será enviado ao cliente
$dataFileName = 'data.php';


while ( true )
{
    $requestedTimestamp = isset ( $_GET [ 'timestamp' ] ) ? (int)$_GET [ 'timestamp' ] : null;

    // o PHP faz cache de operações "stat" do filesystem. Por isso, devemos limpar esse cache
    clearstatcache();
    $modifiedAt = filemtime( $dataFileName );

    if ( $requestedTimestamp == null || $modifiedAt > $requestedTimestamp )
    {
        $data = file_get_contents( $dataFileName );

        $arrData = array(
            'content' => $data,
            'timestamp' => $modifiedAt
        );      

        $json = json_encode( $arrData );

        echo $json;

        break;
    }
    else
    {
        sleep( 1 );
        continue;
    }
}

正如你所看到的,我说$dataFileName = 'data.php'进一步向下我做了一个等于data.php内部数据的内容。我不能出于某种原因在data.php中显示php标签内的数据,但我可以显示纯文本:

 <?php 
$hej = "This will not display";
return json_encode($hej);
?>
This will display

希望你能帮忙,理解我的问题!

3 个答案:

答案 0 :(得分:2)

由于您正在回显特殊字符,因此您可能需要转换它们才能正确显示它。

您可以尝试转换这些字符的htmlentities -

echo htmlentities($data);

EDIT-1 例如(假设data.php包含php代码) -

$data = file_get_contents("a.php");
echo htmlentities($data);
/*
    OUTPUT - 
    <?php $hej = "This will not display"; return json_encode($hej); ?> This will display
*/

EDIT -2- 如果您想要实际执行文件并将其结果存储在字符串中,那么输出缓冲区就是您所需要的。

基本上你执行php文件,文件的输出存储在缓冲区中。在它结束时,缓冲区内容被复制到一个字符串。

这应该有效 -

ob_start();
include("data.php");
$res = ob_get_contents();
ob_end_clean();
var_dump($res);

答案 1 :(得分:1)

而不是

return json_encode($hej);

echo json_encode($hej);

答案 2 :(得分:-1)

我找到了答案! $dataFileName = 'http://www.dota2u.com/newd2u/longpoll/data.php'

感谢您的时间!