У меня есть сценарий bash, который я запускаю, как это, через командную строку:
./script.sh var1 var2
Я пытаюсь выполнить указанную выше команду после вызова определенного файла php.
Сейчас у меня есть:
$output = shell_exec("./script.sh var1 var2"); echo "<pre>$output</pre>";
Но он не работает. Я попробовал это с помощью exec
и system
, но сценарий так и не был выполнен.
Однако когда я пытаюсь запустить shell_exec("ls");
он работает, а $output
– это список всех файлов.
Я не уверен, связано ли это с ограничением VPS, который я использую, или если проблема находится где-то в другом месте?
Вероятно, вам нужно перейти к правильному каталогу перед вызовом сценария. Таким образом, вы можете обеспечить, какой каталог ваш сценарий находится «в», прежде чем вызывать команду оболочки.
$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"]."");
Где ваш скрипт находится в / home / user / bin. Позже вы можете
$output = "<pre>".shell_exec("scriptname v1 v2")."</pre>"; echo $output;
Отобразить вывод команды. (В качестве альтернативы, не экспортируя путь, попробуйте указать весь путь к вашему сценарию, а не просто ./script.sh
Проверьте, не установили ли open_basedir в php.ini или .htaccess домена то, что вы используете. Это запишет вас в каталог вашего домена, и php получит только доступ для выполнения внутри этого каталога.