Mac OS X MAMP Pro PHP Cli配置

时间:2015-02-19 16:16:52

标签: php shell command-line-interface php-ini mamp-pro

我对Mamp pro有一个php cli命令问题。我的问题是php脚本和终端内的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. 相同的结果,但更详细的命令=&gt; 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版本=&gt; 5.5.18

    在导航器中:

    结果:/ usr / bin / php PHP版本=&gt; 5.5.18

  4. 所以似乎从导航器启动的php脚本使用正确版本的php,因为php信息返回正确的版本(5.5.18)但这个php脚本的cli使用另一个php,这是我的问题。但是当从终端启动此脚本时,所有内容都符合预期。

1 个答案:

答案 0 :(得分:1)

您遇到的问题是Apache没有使用您的用户帐户下Mac OS X Terminal使用的基于BASH的PATH配置。换句话说,在Web运行页面在Apache下运行时,通过配置特定的登录用户.bash_profile条目设置的“ PATH”值特定于用户的BASH Shell(终端)进程。即它不会加载您的用户帐户的BASH设置)。

如果要使用exec(),则以相同的二进制文件(基于每个PHP脚本)结尾的简单方法是执行以下操作:

<?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;
?>

(注意:以上脚本是针对换行符而不是Web输出格式化的,以换行符表示。)

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

还有其他方法可以完成同一件事(例如Apache级配置等)-但希望这可以解释您为什么看到不同的值,并为您提供一种解决问题的方法。