我的Mamp有一个php cli命令问题。我的问题是,php脚本中的exec和终端中的exec是不同的。我解释:
这很正常,因为我更改了.bash_profile文件中的路径,如下所示:
出口MAMP_PHP=/Applications/MAMP/bin/php/php5.5.18/bin PATH= PATH="$MAMP_PHP:$PATH“
导航器中的:
在php脚本中使用这一行:
我得到了这个路径: /usr/bin/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.18/bin/PHP PHP版本=> 5.5.18
导航器中的:
结果: /usr/bin/php PHP版本=> 5.5.18因此,从导航器启动的php脚本似乎使用了正确的php版本,因为php info返回正确的版本(5.5.18),但是这个php脚本的cli使用另一个php,这是我的问题。但是,当这个脚本从终端启动时,一切都如期而至。
发布于 2018-10-24 19:12:46
您遇到的问题是,Apache没有使用与您的用户帐户下的Mac终端相同的基于BASH的路径配置。换句话说,您通过配置特定的登录用户.bash_profile条目来设置的“路径”值是特定于您的用户的BASH (终端)进程的,而您的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中使用的相同路径设置值,但在Apache运行PHP脚本的上下文中。
完成同样的事情还有其他的方法(Apache级别的吐露,等等)--但希望这能解释为什么你看到了不同的价值观,并给了你一种解决问题的方法。
https://stackoverflow.com/questions/28611329
复制相似问题