Команда Sed через shell exec не выполняется
Я хочу выполнить команду оболочки после нажатия кнопки внутри html-кода, поэтому:
В моем 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-код выполняется правильно, поскольку, если я изменю команду оболочки простым котом, она будет работать так, как ожидалось, но я не могу понять, почему она ничего не делает, когда команда для выполнения таковаsed
выражение.
Я проверил, что такая команда sed
работает при выполнении непосредственно в командной строке, и я также отказался от любых проблем с разрешениями с тех пор, как я изменил"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
не сработала.
Я бегу ЛАМПА на рабочем столе Ubuntu со следующей версией sed
:
$ sed --version
sed (GNU sed) 4.2.2
1 answers
Поскольку sed создает временный файл в том же каталоге, что и файл, сценарий должен иметь разрешения на запись в этот каталог.