У меня проблема с командой php cli с Mamp pro. Моя проблема в том, что exec внутри скрипта php и в терминале разные. Я объясняю:
когда я выполню эту команду => какой php
В терминале Mac:
Я получаю этот путь: /Applications/MAMP/bin/php/php5.6.2/bin/php
Это нормально, потому что я изменяю путь в моем файле .bash_profile
как это:
export MAMP_PHP=/Applications/MAMP/bin/php/php5.5.18/bin
export PATH="$MAMP_PHP:$PATH"
В навигаторе:
with this line inside a php script:
<?php echo exec("which php"); ?>
Я получаю этот путь: / usr / bin / php
Тот же результат, но более подробно с помощью команды => php —ini
В терминале Mac:
Configuration File (php.ini) Path: /Applications/MAMP/bin/php/php5.5.18/conf
Loaded Configuration File: /Applications/MAMP/bin/php/php5.5.18/conf/php.ini
Scan for additional .ini files in: (none)
Additional .ini files parsed: (none)
В навигаторе:
Configuration File (php.ini) Path: /etc
Loaded Configuration File: /etc/php.ini
Scan for additional .ini files in: /Library/Server/Web/Config/php
Additional .ini files parsed: /Library/Server/Web/Config/php/php.ini
И тем более странно, когда пишете php файл с таким кодом внутри:
<?php var_dump(shell_exec("which php -v")); phpinfo(); ?>
и я запускаю этот скрипт в терминале и в навигаторе тоже. Я получил это:
В терминале Mac:
Запустите с помощью: php -f /Users/tm/Sites/test.com/test.php
Результат: /Applications/MAMP/bin/php/php5.5.18/bin/php
Версия PHP => 5.5.18
В навигаторе:
Результат: / usr / bin / php
Версия PHP => 5.5.18
Таким образом, кажется, что скрипт php, запущенный из навигатора, использует правильную версию php, потому что информация php возвращает правильную версию (5.5.18), но в этом скрипте php используется другой php, и это моя проблема. Но когда этот скрипт запускается из терминала, все как и ожидалось.
Проблема, с которой вы сталкиваетесь, заключается в том, что Apache не использует те же конфигурации PATH на основе BASH, которые использует ваш Mac OS X Terminal под вашей учетной записью. Другими словами, значение «PATH», которое вы устанавливаете, настраивая запись вашего конкретного пользователя .bash_profile для входа в систему, относится к процессам оболочки BASH (Терминал) для вашего пользователя, когда ваша веб-страница запускается под Apache ( то есть он не загружает настройки BASH вашей учетной записи).
Простой способ получить тот же двоичный файл (на основе сценариев для PHP), если вы собираетесь использовать exec (), это сделать что-то вроде этого:
<?php
echo "Default PHP path: " . exec('which php') . PHP_EOL;
$current_path = exec('echo $PATH');
$your_custom_php_path = '/Applications/MAMP/bin/php/php5.5.18/bin';
putenv('PATH=' . $your_custom_php_path . ':' . $current_path);
echo "New PHP path: " . exec('which php') . PHP_EOL;
?>
(Примечание: приведенный выше сценарий отформатирован для вывода оболочки, а не для вывода в Интернете, с точки зрения разрывов строк).
Это в основном настраивает ваш PHP-скрипт на лету для добавления (и использования) того же значения параметра PATH, которое вы используете в BASH, но в контексте вашего PHP-скрипта, запускаемого Apache.
Есть другие способы сделать то же самое (конфиги уровня Apache и т. Д.), Но, надеюсь, это объясняет, почему вы видите разные значения, и дает вам один способ обойти эту проблему.
Других решений пока нет …