Подтвердить что ты не робот

Запустите команду Bash из PHP

У меня есть bash script, который я запускаю, как это, в командной строке:

./script.sh var1 var2

Я пытаюсь выполнить указанную выше команду после вызова определенного файла php.

То, что у меня есть сейчас:

$output = shell_exec("./script.sh var1 var2");
echo "<pre>$output</pre>";

Но он не работает. Я попробовал это, используя exec и system тоже, но script никогда не был выполнен.

Однако, когда я пытаюсь запустить shell_exec("ls");, он работает, а $output - это список всех файлов.

Я не уверен, связано ли это с ограничениями VPS, которые я использую, или если проблема находится где-то в другом месте?

4b9b3361

Ответ 1

Вероятно, вам нужно chdir вставить нужную директорию перед вызовом script. Таким образом, вы можете обеспечить каталог, в котором ваш script находится внутри, перед вызовом команды оболочки.

$old_path = getcwd();
chdir('/my/path/');
$output = shell_exec('./script.sh var1 var2');
chdir($old_path);

Ответ 2

Ваш shell_exec выполняется пользователем www-data из его каталога. Вы можете попробовать

putenv("PATH=/home/user/bin/:" .$_ENV["PATH"]."");

Если ваш script находится в /home/user/bin Позже вы можете

$output = "<pre>".shell_exec("scriptname v1 v2")."</pre>";
echo $output;

Отобразить вывод команды. (В противном случае, не экспортируя путь, попробуйте указать весь путь к вашему script, а не просто./script.sh

Ответ 3

Проверьте, не установили ли open_basedir в php.ini или .htaccess домена то, что вы используете. Это запишет вас в каталог вашего домена, и php получит только доступ для выполнения внутри этого каталога.