Использование оболочки bash из PHP
В окне моего терминала (используя Max OS X) моя оболочка-bash. Однако, когда я запускаю команду в PHP через операторы shell_exec или backtick, я вижу, что PHP использует оболочку Bourne (sh). Вот пример того, что я вижу:
Из окна моего терминала:
$ echo $0
- bash
Также, если я вызову php следующим образом:
$ php -r "echo shell_exec('echo $0');"
-bash
Однако, если я создам сценарий под названием test.php со следующим:
<?php echo shell_exec('echo $0'); ?>
А затем запускаем тестовый php я получаю следующее:
$ php test.php
sh
Я хочу использовать оболочка bash при вызове shell_exec-почему она выбирает оболочку Bourne и могу ли я заставить ее использовать bash?
Спасибо!
Дан
3 ответов:
Переверните кавычки во второй команде:
$ php -r 'echo shell_exec("echo $0");' shС кавычками, как они были в вашем вопросе, переменная
$0расширяется перед отправкой команды вphp.Если вы хотите принудительно использовать Bash, вы можете сделать что-то вроде:
php -r '$cmd="echo \\\$0"; echo shell_exec("/bin/bash -c \"$cmd\"");'
вероятно, он считывает переменную среды оболочки.игнорируя это, putenv() не сработал.Попробуйте просто выполнить нужную команду с помощью bash, например
shell_exec("bash script.sh");
Предполагая, что:
- Ваш PHP скрипт выполняется веб-сервером (скажем, Apache)
- веб-сервер выполняется с правами специальной учетной записи пользователя,
Одним из возможных (но не оптимальных) решений было бы изменение оболочки по умолчанию учетной записи пользователя, под которой выполняется ваш веб-сервер.
Comments