оболочка — Mac OS X MAMP Pro Конфигурация PHP Cli

У меня проблема с командой php cli с Mamp pro. Моя проблема в том, что exec внутри скрипта php и в терминале разные. Я объясняю:

  1. когда я выполню эту команду => какой 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

  2. Тот же результат, но более подробно с помощью команды => 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
    
  3. И тем более странно, когда пишете 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, и это моя проблема. Но когда этот скрипт запускается из терминала, все как и ожидалось.

1

Решение

Проблема, с которой вы сталкиваетесь, заключается в том, что 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 и т. Д.), Но, надеюсь, это объясняет, почему вы видите разные значения, и дает вам один способ обойти эту проблему.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]