在变量中包含文件内容

时间:2016-09-12 08:19:33

标签: php

在我的应用程序中,我经常使用AJAX调用来获取某些变量以及html代码,样本JSON:

{
    'result': '1',
    'error': '0',
    'someVar': 'abc',
    'outputHTML':   '<table>....</table>',
}

创建这样的JSON我必须在关联数组中分配每个值并对其进行编码(服务器端:PHP代码)。

$response=array(
    'result'    =>  1,
    'error' =>  0,
    'someVar'   =>  'abc',
    'outputHTML'    =>  '<table>....</table>',
);
echo @json_encode($response);
die();

我的HTML代码直接在我的类中,但我想将其移动到单独的模板文件中以减少类大小并将类代码与html代码分开。问题是我无法将模板代码转换为变量,样本:

function ajax_response()
{
    $response=array();
    //of course below code doesn't work
    $response['outputHTML']=include('table-html.php');
    echo @json_encode($response);
    die();
}

table-html.php文件包含:

<table>
    ...
</table>

该问题的一个解决方案是使用输出缓冲来捕获table-html.php文件的内容并将其插入到变量中。缺点是输出缓冲并不总是在服务器上启用,因此在某些主机上这样的代码将无法正常工作。 您对该问题的替代解决方案有什么建议吗?

注意:模板文件使用PHP代码动态生成HTML代码,因此必须解析包含的PHP文件。

更新

实际上这段代码可行:

$response['outputHTML']=include('table-html.php');

如果table-html.php具有以下内容:

<?php
$output = '<table>'.$some_var.'</table>';
return $output;

1 个答案:

答案 0 :(得分:4)

includerequire用于将PHP代码加载到您的应用程序中。

要获取文件的内容并将其存储在变量中,请使用file_get_contents 请注意,文件的给定路径是相对于条目脚本的。当您的脚本包含在其他位置时,这可能会产生意外结果。要解决此问题,请使用__DIR__魔法常量。

最终代码如下:

$response['outputHTML'] = file_get_contents(__DIR__ . '/table-html.php');

如果你想解析PHP

首先,您可能需要查看Twig之类的模板引擎,并省去一些麻烦。

如果您想自己动手,您需要在代码中更改的唯一方法是在table-html.php末尾返回一个变量。我建议使用Heredoc创建可读且简单的模板。

示例

<?php
    return <<<EOT
        <table>
            <tr><td>$firstname</td><td>$lastname</td></tr>
        </table>
    EOT;