1

htmlフォームを使用して設定ファイルを編集しようとしています。編集(settings.php)ファイルは次のようになります。

$config['foo'] = FALSE;
$config['maintenance'] = FALSE;  //this line is that what it matters
$config['bar'] = FALSE;

ここでの考え方はのを変更することです$config['maintenance']。フォームが送信されると(maintenance状態に応じてステータスをtrueまたはfalseに設定するために名前が付けられたチェックボックスがあります)、チェックボックスの値は次のようになります。

$status = ($_POST['maintenance'] === 'on')? "TRUE" : "FALSE";

var valueをデバッグ$statusしましたが、ここまですべてうまくいきます。今、私はファイルで正しい行を見つけるために以下の正規表現を使用しています:

\$config\[(\s+)?(\'|")maintenance(\'|")(\s+)?\](\s+)?=(\s+)?(false|FALSE|true|TRUE);/

よくわからないので、最初は「うまくいく」のですが、説明を終えさせてください...上記のコードに従って、今度は交換を行います。

//read the content and replace it
$content = preg_replace(
    '/\$config\[(\s+)?(\'|")maintenance(\'|")(\s+)?\](\s+)?=(\s+)?(false|FALSE|true|TRUE);/',
    '$config["maintenance"] = ' . $status . ';', 
    file_get_contents($file)
);

//set the new content
file_put_contents($file, $content); 

チェックボックスをオンにして初めて実行すると、機能し、結果は次のようになります。

$config['foo'] = FALSE;
$config["maintenance"] = TRUE;
$config['bar'] = FALSE;

ただし、チェックボックスで何を選択しても、ファイルには変更が表示されません。バグを見つけるための正しい方向に私を導くことができますか?ありがとうございました

編集。これはhtmlマークアップです

<label>
    <input type="checkbox" name="maintenance" /> in maintenance mode
</label>
4

2 に答える 2

1

ただし、投稿したコードは私にとっては問題なく機能します。次のようなデバッグをさらに行う必要があります。

error_reporting(-1);

または置換前後の $content を確認します。エラー ログを確認します (または、display_errors をオンに設定している場合はエラー メッセージを検索します)。何か問題がある可能性があります。(例: ファイルのパーミッション)。

次の点も考慮してください。

  • 1行を置き換えるだけでなく、構成ファイルを完全に書き直す - エラーが発生しやすい可能性があります。
  • ファイルへの書き込み/ファイルからの読み取り中にロックを取得する
于 2013-01-07T00:01:05.950 に答える
1

これを試して:

$status = (isset($_POST['maintenance'])) ? 'TRUE' : 'FALSE';

と:

$content = preg_replace(
    '/\$config\[\s*[\'"]maintenance[\'"]\s*\]\s*=\s*(false|true);/i',
    '$config["maintenance"] = ' . $status . ';', 
    file_get_contents($file)
);
于 2013-01-06T18:33:13.980 に答える