php形式与exec和sed命令

时间:2013-03-06 21:18:09

标签: php forms sed exec

我正在尝试创建一个php表单来更改我的vps文件中的值。这是我正在尝试的代码:

<?php
echo "<form ";  
    $type = (int)$_POST['animal_type'];                  
    echo exec("sed -i 's/animal=*/animal=$type/g' /home/user1234/animals/file.props");
    echo "method='post'>";
    echo '<select name="animal_type" onChange="this.form.submit()">';
    echo '<option value="bat">bat</option>';
    echo '<option value="fish">fish</option>';
    echo '<option value="cat">cat</option>';
    echo '<option value="dog">dog</option>';
    echo '</select>';
 echo '</form>';
?>

我再次更新了我的代码。目前它只是将00添加到file.props中的animal = value,而不是使用表单中选择的值覆盖当前值。

php页面上的表单中的值也永远不会改变,并始终保持为bat。

每当我尝试刷新页面时,我也会收到此消息:“要显示此页面,Firefox必须发送重复之前执行的任何操作(例如搜索或订单确认)的信息。”

除了sed和exec之外,还有更好的方法来更改这些值吗?或者我在代码中仍然做错了什么?

1 个答案:

答案 0 :(得分:1)

表单的action attribute需要指定URI。相反,有一个exec函数返回一个字符串。我假设这个字符串不是有效的URI。所以在html的源代码中它看起来像这样:

<form action=some string returned by exec>

发生的事情如下:

  1. 页面已加载
  2. 处理
  3. exec('sed ....')并将结果放入html
  4. 用户点击“提交”并转到操作中指定的URI。在这种情况下,它是exec('sed ....')
  5. 结果的最后一行

    我建议您通过将表单更改为发布到另一页<form action="changeFile.php">来简化此操作,然后在changeFile.php中添加逻辑以修改VPS文件。

    例如,在changeFile.php中添加逻辑以使用以下内容更改内容:

    <?php    
    exec("sed -i 's/animal=*/animal=$_REQUEST['type']/g' /home/user1234/animals/file.props");
    echo 'file modified'
    ?>
    

    这也可以通过将页面发布到自身来实现,如下所示:

    <?php
    ini_set('display_errors', 1);
    ini_set('error_reporting', E_ALL);
    
    if(!empty($_REQUEST['animal_type'])){
        exec('sed -i '.escapeshellarg('s/animal=*/animal='.$_REQUEST['animal_type'].'/g')." /home/user1234/animals/file.props");
        echo 'File has been updated';
    }
    ?>
    
    <form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
        <select name="animal_type">;
            <option value="true">bat</option>;
            <option value="false">fish</option>;
            <option value="cat">cat</option>;
            <option value="dog">dog</option>;
        </select>
        <input type="submit" name="Submit" value="Submit" />
    </form>