1


我正在HTML使用PHP. 这些HTML文件有一个模式({{$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文件.htaccessHTML

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

由于我的应用程序的体系结构,我需要一个HTMLPHP.

然而,这已被证明是一项比预期更大的任务,因为我在将文件转换为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等获取数据。

我们欢迎所有的建议!

4

0 回答 0