Использование оболочки 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?



Спасибо!



Дан

579   3  

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");

Предполагая, что:

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

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

Comments

    Ничего не найдено.