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

私は2番目のアレックスの答えです。もう1つの可能性は、ファイルを破棄し、txtファイルに置き換えて、それをphp含めることです。

于 2012-09-10T13:27:50.197 に答える