Запустите команду 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, который я использую или если проблема в чем-то другом?
3 answers
Вам, вероятно, потребуется chdir в правильный каталог перед вызовом скрипта. Таким образом, вы можете убедиться, в каком каталоге находится ваш скрипт, прежде чем вызывать команду оболочки.
$old_path = getcwd();
chdir('/my/path/');
$output = shell_exec('./script.sh var1 var2');
chdir($old_path);
Ваш shell_exec выполняется пользователем www-data из его каталога. Вы можете попробовать
putenv("PATH=/home/user/bin/:" .$_ENV["PATH"]."");
Где ваш скрипт находится в /главная/пользователь/ячейка Позже вы сможете
$output = "<pre>".shell_exec("scriptname v1 v2")."</pre>";
echo $output;
Для отображения вывода команды. (В качестве альтернативы, без экспорта пути, попробуйте указать весь путь вашего скрипта, а не только./script.sh
Проверьте, не установили ли вы open_basedir в php.ini или .htaccess домена, который вы используете. Это посадит вас в тюрьму в каталоге вашего домена, и php получит доступ только для выполнения внутри этого каталога.