通过shell_exec执行sed命令没有被执行

时间:2017-02-24 11:53:04

标签: php html bash sed shell-exec

我想在单击html代码中的按钮后执行shell命令,所以:

在我的HTML代码中:

<form action=execute.php method="post">
    <input name="submit" type="submit" value="Reset">
</form>

execute.php:

<?php
    $output = shell_exec("sed -i '2,3d' filename.txt");
    //$output = shell_exec("cat filename.txt");
    echo "<pre>$output</pre>";

    $url = htmlspecialchars($_SERVER['HTTP_REFERER']);   
    echo "<a href='$url'>Back</a>"; 
?>

目的是删除文本文件的所有行,但是第一行。

我认为php代码正在被正确执行,因为如果我用一个简单的cat修改shell命令,它会按预期工作,但我无法弄清楚为什么它执行的命令是{{{ 1}}表达。

我已经验证了这样的sed命令在CLI中直接执行时有效,我也放弃了任何权限问题,因为我将“filename.txt”编码为777.实际上如果更改php代码以附加一些文本到文件它也有效。例如:

sed

在寻找信息之后,我意识到我想要的东西可以直接用php完成:

$output = shell_exec("echo hi >> filename.txt");

但现在我只是好奇为什么我的file_put_contents("filename.txt", ""); file_put_contents("filename.txt", "First_line_content"); 命令不起作用。

我在Ubuntu桌面上运行LAMP,其中包含以下sed版本:

sed

1 个答案:

答案 0 :(得分:1)

当sed在与文件相同的目录中创建临时文件时,该脚本必须具有对该目录的写入权限。