我正在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文件.htaccess中HTML:
AddType application/x-httpd-php .html
php_value auto_prepend_file "prepend.inc"
由于我的应用程序的体系结构,我需要一个HTML在PHP.
然而,这已被证明是一项比预期更大的任务,因为我在将文件转换为PHP字符串和回显时所做的任何尝试都会导致上述内容ob_callback没有被执行......(尽管我知道prepend.inc正在运行)
我已经尝试过fread,file_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等获取数据。
我们欢迎所有的建议!