私は標準の設定ファイルを持っています:$variable = 'value';
、しかし最後の瞬間にそれを設定するためにウェブインターフェースを使用するようになりました。では、ファイルを読み取り、変数の値を見つけて、ファイルを再度保存するための最良の方法は何でしょうか。
現在、私には2つのアイデアがあります。
1)RegExp
2)配列の例をどこかに保持する
私は標準の設定ファイルを持っています:$variable = 'value';
、しかし最後の瞬間にそれを設定するためにウェブインターフェースを使用するようになりました。では、ファイルを読み取り、変数の値を見つけて、ファイルを再度保存するための最良の方法は何でしょうか。
現在、私には2つのアイデアがあります。
1)RegExp
2)配列の例をどこかに保持する
次のように、すべての設定値を連想配列に保存します。
$config = array(
'variable' => 'value'
);
Web インターフェイスの場合、配列全体を簡単にループできます。
foreach($config as $key=>$value) { ... }
変更を行った後、配列をループしてファイルに書き戻します。(ただし、これには実際にDBを使用する必要があります)。
ファイルをインクルードすると、次のように使用できます。
include('config.php');
echo $config['variable']
// or
extract($config);
echo $variable;
注: 抽出すると、抽出前に定義した同じ名前の変数が上書きされます。
PS - ファイルの読み書きを簡単にするために、json エンコーディングを使用して配列をシリアル化します。
構成がユーザー定義の場合、構成をデータベースに保存することをお勧めします。そうしないと、この「新しい」問題を解決する必要がありますが、セキュリティの問題が発生する可能性もあります。つまり、任意のユーザーが構成ファイルを編集できるようにするには、Web サーバー ユーザーが書き込み可能である必要があります。これにより、Web エクスプロイトからこのファイルに悪意のあるコードを挿入するドアが開かれます。または、サーバー (共有ホスト?) に直接アクセスできる誰かが、この書き込み可能なファイルを見つけて、好みに合わせて更新します (たとえば、" <?php header('Location: my site'); die;
" を入れます)。
構成ファイルで管理する必要がある場合は、ファイルを含めて読み取り、変数をvar_exportして書き込みます。これは、構成変数が 1 つしかない場合、つまり配列である場合に最も簡単です。例えば:
function writeConfig($config = array()) {
$arrayAsString = var_export($config, true);
$string = "<?php\n";
$string .= "\$config = $arrayAsString;\n";
file_put_contents('config.php', $string);
}
一部の変数のみを変更する場合は、書き換える前に構成ファイルをインクルードしてください。
function writeConfig($edits = array()) {
require 'config.php';
$edits += $config;
$arrayAsString = var_export($edits, true);
$string = "<?php\n";
$string .= "\$config = $arrayAsString;\n";
file_put_contents('config.php', $string);
}
構成ファイルに複数の変数がある場合は、get defined varsを使用し、それらをループしてファイルを書き戻します。
function writeConfig($_name = '', $_value) {
require 'config.php';
$$_name = $_value; // This is a variable variable
unset($_name, $_value);
$string = "<?php\n";
foreach(get_defined_vars() as $name => $value) {
$valueAsString = var_export($value, true);
$string .= "\$$name = $valueAsString;\n";
file_put_contents('config.php', $string);
}
}
上記のコードは、変数 variableを使用して、構成ファイル内の変数の 1 つを上書きします。これらの最後の 2 つの例はそれぞれ、複数の変数を同時に更新するように簡単に適応させることができます。