Mac OS X MAMP Pro PHP Cli configuration


Mac OS X MAMP Pro PHP Cli configuration

我在Mamp pro中遇到了php-cli命令问题。我的问题是php脚本内部的exec和终端中的exec是不同的。我解释:

  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/phpPHP版本=>5.5.18

    在导航器中:

    结果:/usr/bin.phpPHP版本=>5.5.18

因此,从导航器启动的php脚本似乎使用了正确版本的php,因为php信息返回了正确版本(5.5.18),但该php脚本的cli使用了另一个php,这是我的问题。但当这个脚本从终端启动时,一切都如预期的那样。

您遇到的问题是Apache没有使用与您的用户帐户下的Mac OS X终端相同的基于BASH的PATH配置。换句话说,您通过配置特定登录用户.bash_profile条目设置的"PATH"值是特定于用户的bash shell(终端)进程的,而您的web运行页面是在Apache下运行的(即,它不加载用户帐户的bash设置)。

如果你要使用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;
?>

(注意:上面的脚本是为shell输出格式化的,而不是为web输出格式化的。

这基本上是在运行中配置您的PHP脚本,以准备(并使用)与您在BASH中使用的PATH设置值相同的值,但在Apache运行的PHP脚本的上下文中。

还有其他方法可以完成同样的事情(Apache级别的配置等),但希望这能解释为什么你看到不同的值,并为你提供一种绕过这个问题的方法。