我正在处理一个小应用程序,它会生成配置文件。因为它可以用于生成一些不同的配置变体,所以我从用户收集变量值,然后从文件中读取模板配置。该文件在其中有适当位置的变量名称(即$ ip_address)。在阅读和打印文件之前,我已经在我的PHP代码中设置了这些变量。但是,会打印出变量名称,而不是变量的值:
$hostname = $_POST['username'] . "_891";
$domain = $_POST['username'] . ".local";
$routerFile = "891.txt";
$file_handle = fopen($routerFile, "r");
while (!feof($file_handle)) {
$line = fgets($file_handle);
print $line . "<br />";
}
输出示例:
hostname $hostname
ip domain-name $domain
如何让php用它们存储的值替换变量名?
答案 0 :(得分:2)
您可以使用eval()
,但这不是很安全,所以我会写一个超级简单的正则表达式替换。
$replaced = preg_replace_callback("/\b$\w+\b/",
function($match) use $hostname, $domain {
return $$match
},
$line);
但是,我会在关联数组中放置需要替换的术语,否则use
列表将成为一场噩梦。
如果您真的希望将这些文件视为PHP文件,并且它们没有安全风险(它们不是来自不受信任的来源),只需要include
。
答案 1 :(得分:2)
我会这样:
创建一个包含hostname = <?php echo $hostname; ?>
行的模板,如下所示:
hostname <?php echo $hostname; ?>
ip domain-name <?php echo $domain; ?>
然后在PHP中创建模板你会这样做:
ob_start();
include_once($routerFile);
$file_output = ob_get_clean();
现在您已经使用适当的变量填充了文件模板,您可以保存该文件:
file_put_contents('my_new_router_file.txt', $file_output);
你应该完成。
答案 2 :(得分:0)
我第二次alex回答。
另一种可能性是抛弃txt
文件,将其替换为php
文件并将其包含在内。