Запустите команду 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, которые я использую, или если проблема находится где-то в другом месте?
Ответы
Ответ 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 получит только доступ для выполнения внутри этого каталога.