php form exec,sed和file_get_contents

时间:2013-06-18 18:00:39

标签: php forms sed exec file-get-contents

我正在编写一个脚本来编辑我的vps文件,到目前为止,感谢用户的帮助,我有以下内容:

    <?php
if(!empty($_REQUEST['color_choice'])){
    exec('sed -i '.escapeshellarg('s/color=.*/color='.$_REQUEST['color_choice'].'/g')." /home/user/colors/color.choices");
    echo 'File color choice has been updated';
}
?>

<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
    <select name="color_choice">;
        <option value="red">red</option>;
        <option value="blue">blue</option>;
        <option value="black">black</option>;
        <option value="orange">orange</option>;
    </select>
    <input type="submit" name="Submit" value="Submit" />
</form>

这会根据需要更改值,但我还有一个问题,我仍在尝试解决。该脚本没有获取文件本身的当前值,所以当我第一次访问该页面时,它总是说&#34; red&#34;。在我做出改变后,它仍然说&#34; red&#34;在php表单上。

编辑:我希望表单始终在color.choices文件中显示当前值,而不是仅仅返回&#34; red&#34;每次。如果我将表单上的值更改为&#34; blue&#34;我希望表单显示文件中的当前值设置为&#34;蓝色&#34;。

我被告知需要使用&#34; file_get_contents&#34;首先从文件本身检索值。我做了几次尝试,但我没有在哪里。如果我需要添加更多信息,请告诉我们!

1 个答案:

答案 0 :(得分:0)

如果你这样做会怎么样?

<?php
    $current = file_get_contents("/var/www/html/colors/color.choices");
    $color = explode("=", trim($current));

    if(!empty($_REQUEST['color_choice'])){
        exec('sed -i '.escapeshellarg('s/color=.*/color='.$_REQUEST['color_choice'].'/g')." /var/www/html/colors/color.choices");
        echo 'File color choice has been updated';
    }
?>

<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
    <select name="color_choice">;
        <option value="red" <?php if($color[1] == 'red'){?>selected="selected"<?php }?>>red</option>;
        <option value="blue" <?php if($color[1] == 'blue'){?>selected="selected"<?php }?>>blue</option>;
        <option value="black" <?php if($color[1] == 'black'){?>selected="selected"<?php }?>>black</option>;
        <option value="orange" <?php if($color[1] == 'orange'){?>selected="selected"<?php }?>>orange</option>;
    </select>
    <input type="submit" name="Submit" value="Submit" />
</form>