【问题标题】:Mac OS X MAMP Pro PHP Cli configurationMac OS X MAMP Pro PHP Cli 配置
【发布时间】:2015-02-19 16:16:51
【问题描述】:

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

  1. 当我执行这个命令时 => which 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 文件时: &lt;?php var_dump(shell_exec("which php -v")); phpinfo(); ?&gt; 我也在终端和导航器中启动了这个脚本。我得到了这个:

    在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 脚本的 cli 使用了另一个 php,这是我的问题。但是当这个脚本从终端启动时,一切都如预期的那样。

【问题讨论】:

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


【解决方案1】:

您遇到的问题是 Apache 不使用您的 Mac OS X 终端在您的用户帐户下使用的相同的基于 BASH 的 PATH 配置。换句话说,您通过配置特定登录用户 .bash_profile 条目设置的“PATH”值特定于您的用户的 BASH shell(终端)进程,而您的 web 运行页面正在 Apache 下运行(即它不会加载您的用户帐户的 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;
?>

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-14
    • 2011-06-12
    • 1970-01-01
    • 2011-09-20
    • 2011-05-31
    • 2012-09-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多