0

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

4

3 回答 3

2

你可以使用eval(),但这不是很安全,所以我会写一个超级简单的正则表达式替换。

$replaced = preg_replace_callback("/\b$\w+\b/", 
                                  function($match) use $hostname, $domain { 
                                      return $$match
                                  },
                                  $line);

但是,我会将需要替换的术语放在关联数组中,否则您的列表use将成为一场噩梦。

如果您真的希望将这些文件视为 PHP 文件并且它们没有安全风险(它们并非来自不受信任的来源),那么只需include它们即可。

于 2012-09-10T13:24:23.997 回答
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);

你应该完成了。

于 2012-09-10T13:29:08.323 回答
0

我第二次回答亚历克斯。另一种可能性是放弃txt文件,将其替换为php文件并仅包含该文件。

于 2012-09-10T13:27:50.197 回答