【发布时间】:2017-07-15 05:54:45
【问题描述】:
我想在单击 html 代码中的按钮后执行 shell 命令,所以:
在我的html代码中:
<form action=execute.php method="post">
<input name="submit" type="submit" value="Reset">
</form>
执行.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 命令,它会按预期工作,但我无法弄清楚为什么当要执行的命令是 @987654323 时它什么都不做@表达式。
我已经验证了这样的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 命令不起作用。
我正在使用以下sed 版本的 Ubuntu 桌面上运行 LAMP:
$ sed --version
sed (GNU sed) 4.2.2
【问题讨论】:
标签: php html bash sed shell-exec