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


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

./script.sh var1 var2

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

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

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

Но это не работает. Я тоже пробовал использовать exec и system, но сценарий так и не был выполнен.

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

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

Author: Zdeněk Bednařík, 2012-06-15

3 answers

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

$old_path = getcwd();
chdir('/my/path/');
$output = shell_exec('./script.sh var1 var2');
chdir($old_path);
 65
Author: Robert K, 2012-06-15 14:18:03

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

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

Где ваш скрипт находится в /главная/пользователь/ячейка Позже вы сможете

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

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

 5
Author: Hrishikesh, 2012-06-15 14:18:00

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

 0
Author: CommanderSpock, 2017-09-22 09:41:23