在外部PHP文件中回显ob_start回调

时间:2013-10-04 23:37:06

标签: php html .htaccess ob-start


我正在使用HTML中的数据库信息处理人口静态PHPHTML文件具有模式({{$ pattern}}),当位于HTML文件中时,将替换为匹配的PHP变量。 示例HTML文件可以是:

<div>{{$apples}}</div>

要按需填充此HTML文件,我已创建以下PHP脚本(prepend.inc):

function ob_callback($buffer){

    global $data;
    $data['apples'] = CONSTANT; //global definition defined elsewhere

    $buffer = preg_replace_callback(
          '/{{\$([a-zA-Z0-9_]+)}}/',
          function($matches){
                 global $data;
             return (isset($data[$matches[1]])?$data[$matches[1]]:"");
          },
          $buffer);
    return $buffer;
}
ob_start("ob_callback");

通过将以下内容添加到HTML目录中的.htaccess,将此脚本添加到每个HTML文件中:

AddType application/x-httpd-php .html
php_value auto_prepend_file "prepend.inc"

由于我的应用程序的体系结构,我需要在HTML中回显PHP文件。

但事实证明这是一项比预期更重要的任务,因为我在将文件转换为PHP字符串时所做的任何尝试以及回显导致上述ob_callback未执行...(通过我知道prepend.inc已运行)

我尝试过freadfile_get_content甚至:

const CONSTANT = 'oranges';
ob_start();
require 'theHTMLfile.html';
$out = ob_get_contents();
ob_end_clean();
echo $out;

这些似乎都没有达到prepend.inc中的ob_start回调,并且已经替换了模式...
一种解决方案是使用完整的URL(require 'http://www.example.com/theHTMLfile.html';),但我不能使用它,因为它会破坏对全局变量的引用,我需要为HTML等获取数据。 />

任何建议都将不胜感激!

0 个答案:

没有答案