我在Mamp pro中遇到了php-cli命令问题。我的问题是php脚本内部的exec和终端中的exec是不同的。我解释:
-
当我执行这个命令=>哪个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/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级别的配置等),但希望这能解释为什么你看到不同的值,并为你提供一种绕过这个问题的方法。