1

我正在尝试使用 html 表单编辑配置文件。编辑 (settings.php) 文件如下所示:

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

这里的想法是更改 of $config['maintenance'],因此一旦提交表单(有一个名为复选框以maintenance根据其状态将状态设置为 true 或 false),我得到的复选框值为:

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

我已经调试了$statusvar 值,这里一切正常。现在,我正在使用下面的正则表达式在文件中找到正确的行:

\$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

试试这个:

$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 回答
1

但是你发布的代码对我来说很好,你应该做更多的调试,比如:

error_reporting(-1);

或在替换前后检查 $content。检查您的错误日志(如果您将 display_errors 设置为 on,则搜索错误消息)。可能有什么问题。(例如文件权限)。

还要考虑:

  • 完全重写配置文件,而不是仅仅替换一行——它可能容易出错。
  • 在写入/读取文件时获取锁
于 2013-01-07T00:01:05.950 回答