Мой нынешний способ сделать это - использовать PHP exec

<?php

$filename = "log.txt";
$text = $_POST['form'];

$fp = fopen ($filename, "w");
if ($fp) {
    fwrite ($fp, $text);
    fclose ($fp);
    exec('/var/www/html/bash.sh');
header('Location: /next.html');
}
else {
    echo ("ERROR.");

}

?>

Так что я знаю, что скрипт по крайней мере работает, потому что он пишет в log.txt нормально, но из того, что я вижу, ничего в bash.sh на самом деле не работает. Просто в командной строке, если я бегу

"exec sudo bash /full/path/bash.sh"

Тогда он выполняет это нормально. Я не уверен, является ли это ошибкой разрешения, или что. Я делаю что-то не так или есть просто лучший способ сделать это? Заранее благодарю за любую помощь.

1 ответ1

0

Как минимум три проблемы здесь:

  • код записывает содержимое формы в файл с именем log.txt (в каком-то неизвестном каталоге) и затем выполняет несвязанный файл /var/www/html/bash.sh
  • код запускает /var/www/html/bash.sh без указания интерпретатора, поэтому он полагается на правильную шебангу в скрипте (а ваш внешний тест указал интерпретатор: sudo bash ...
  • Скрипт запускается с идентификатором сервера (www-data или somesuch), а не с root.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .