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

问题描述:

我想点击一个按钮的HTML代码中后执行shell命令,所以:sed命令通过了shell_exec没有被执行

在我的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代码正在正确执行,因为如果我通过一个简单的猫修改shell命令,它按预期工作,但我无法弄清楚为什么当执行的命令是什么时候什么也不做,sed表达。

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

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

寻找信息后,我意识到,我想要的东西可以直接用PHP来实现:

file_put_contents("filename.txt", ""); 
file_put_contents("filename.txt", "First_line_content"); 

但现在我只是好奇,为什么我的sed命令未工作。

我运行LAMP在Ubuntu桌面与以下sed版本:

$ sed --version 
sed (GNU sed) 4.2.2 

由于sed的创建在同一目录下文件的临时文件,脚本必须具有写权限到该目录。