Использование оболочки bash из PHP - PullRequest
2 голосов
/ 15 января 2011

В моем терминальном окне (с использованием Max OS X) моя оболочка bash.Однако когда я запускаю команду в PHP через операторы shell_exec или backtick, я вижу, что PHP использует Bourne Shell (sh).Вот пример того, что я вижу:

Из окна моего терминала:

$ echo $0
- bash

Также, если я вызываю php следующим образом:

$ php -r "echo shell_exec('echo $0');"
-bash

Однако,если я создаю скрипт с именем test.php со следующим:

<?php echo shell_exec('echo $0'); ?>

и затем запускаю test php, я получаю следующее:

$ php test.php
sh

Я хочу использовать оболочку bashпри вызове shell_exec - почему он выбирает оболочку Bourne и можно ли заставить ее использовать bash?

Спасибо!

Дан

Ответы [ 3 ]

3 голосов
/ 15 января 2011

Обратные кавычки в вашей второй команде:

$ php -r 'echo shell_exec("echo $0");'
sh

С кавычками, которые у вас были в вашем вопросе, переменная $0 раскрывается перед отправкой команды на php.

Если вы хотите принудительно использовать Bash, вы можете сделать что-то вроде:

php -r '$cmd="echo \\\$0"; echo shell_exec("/bin/bash -c \"$cmd\"");'
0 голосов
/ 15 января 2011

При условии, что:

  1. ваш PHP-скрипт выполняется веб-сервером (скажем, Apache)
  2. веб-сервер выполняется с правами специальной учетной записи пользователя,

одним из возможных (но не оптимальных) решений было бы изменение оболочки по умолчанию для учетной записи пользователя, под которой выполняется ваш веб-сервер.

0 голосов
/ 15 января 2011

Вероятно, он читает переменную среды SHELL. Не обращая внимания, putenv () не работает.

Попробуйте просто запустить нужную команду с bash, например

shell_exec("bash script.sh");
...