Intereting Posts
Чтение / использование файлов на сервере / домашнем / папке Поля ACF, не отображаемые на странице пользовательской таксономии WordPress Выполнить mysql «создать функцию» с помощью PHP Имена предметов исчезают при оформлении заказа в Magento Где получить доступ к API Google Analytics access_token? Предотвращение прямого доступа к php-файлам php сортирует ассоциативные массивы ключами, что эти ключи существуют в другом массиве От многих до многих отношений с таксономией в «Красноречии» php 301 перенаправляет фактическое выполнение перенаправления 302 PHP заменяет все происшествия определенного шаблона строки в тексте в формате HTML Удалите строку Mysql после указанного времени Как установить корень документа как подкаталог с использованием .htaccess, а не VHost Как получить часовую зону пользователя с помощью jquery? переменная javascript в php Admin имя пользователя / пароль не работает для PHP

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

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

 $ php test.php sh 

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

Благодаря!

Дэн

Переверните кавычки во второй команде:

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

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

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

 php -r '$cmd="echo \\\$0"; echo shell_exec("/bin/bash -c \"$cmd\"");' 

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

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

 shell_exec("bash script.sh"); 

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

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

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