it-swarm.com.ru

Запустите команду 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 или проблема в другом месте?

45
Oskar

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

$old_path = getcwd();
chdir('/my/path/');
$output = Shell_exec('./script.sh var1 var2');
chdir($old_path);
67
Robert K

Ваш 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

5
Hrishikesh

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

0
CommanderSpock