通过 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 在与文件相同的目录中创建一个临时文件,因此脚本必须对该目录具有写入权限。
我想在点击 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 在与文件相同的目录中创建一个临时文件,因此脚本必须对该目录具有写入权限。