替换php读取的文件中的变量

时间:2012-09-10 13:17:41

标签: php

我正在处理一个小应用程序,它会生成配置文件。因为它可以用于生成一些不同的配置变体,所以我从用户收集变量值,然后从文件中读取模板配置。该文件在其中有适当位置的变量名称(即$ 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用它们存储的值替换变量名?

3 个答案:

答案 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文件并将其包含在内。