通过 shell_exec 的 Sed 命令未被执行

Sed command through shell_exec not being executed

我想在点击 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 代码正在正确执行,因为如果我用一只简单的猫修改 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 在具有以下 sed 版本的 Ubuntu 桌面中:

$ sed --version
sed (GNU sed) 4.2.2

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