如何覆盖PHP路径以使用MAMP路径?

60

在我尝试使SOAP模块工作的过程中,我完全搞砸了我的MAC上的PHP配置(-bash:/usr/bin/php:无此文件或目录....)。现在我不得不使用MAMP,但每次都要输入路径。

Applications/MAMP/bin/php5.3/bin/php to do command line.

如何在Mac上仅键入php而不是整个路径? 我已经仔细检查过了,我没有一个名为 .profilebash_profile 的文件。

谢谢

PS:这是输出 echo $PATH 的结果:

echo $PATH
/Applications/MAMP/Library/bin/:/Applications/MAMP/bin/php5/bin/:/opt/local/bin:/opt/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/local/git/bin:/usr/X11/bin
13个回答

130

在您的主文件夹例如/Users/David中,您可以创建一个.bash_profile。在此处,您可以导出变量,然后将它们添加到您的路径中。

打开文件以在您喜欢的编辑器中进行编辑,我使用vim。

然后您可以将其添加到您的路径中。

export MAMP_PHP=/Applications/MAMP/bin/php/php5.3.6/bin
export PATH="$MAMP_PHP:$PATH"
你需要将你的路径位于$PATH之前,因为这已经包括了系统PHP所在的/usr/bin。这样系统会始终先找到你的MAMP版本。
保存此文件,然后重新启动终端,您会发现您应该获得您的MAMP版本。
测试时,我使用php -v,因为OSX Lion使用5.3.10,而我的MAMP使用5.3.6。 您还可以使用which php进行测试,它将输出当前php可执行文件的路径。

像魔法一样好用。我尝试升级自带的Mac默认php,但没有成功。终于现在php的PATH指向了我的MAMP的php。 - Ashit Vora
1
我知道这篇文章有点老了,但也许它能帮助到某些人。 如果你正在使用MAMP和oh-my-zsh,你应该将这些DavidYell的行放在~/oh-my-zsh/.zshrc文件中。你会发现"export PATH"行(至少在我的当前更新版本中)在第54行。把DavidYell的行放在那之后。对我来说,这个方法非常有效。 - ppalmeida

116

之前被接受的答案提到了php 5.3.6,然而当前版本的MAMP以7.2.1作为默认版本(截至2018年初),这说明那不是一个可持续的解决方案。你可以通过在.bash_profile或者.zshrc中添加一行额外的代码,将最新版本的PHP路径指定到/Applications/MAMP/bin/php/并将其导入到你的path中,让你的路径自动更新。以下是我的做法:

# Use MAMP version of PHP
PHP_VERSION=`command ls /Applications/MAMP/bin/php/ | sort -n | tail -1`
export PATH=/Applications/MAMP/bin/php/${PHP_VERSION}/bin:$PATH

(在更改后,请使用source ~/.bash_profile以确保更改生效。)

正如其他人所提到的,您还可能希望修改您的shell,以使用MAMP的mysql可执行文件,该文件位于/Applications/MAMP/Library/bin中。但是,我不建议导出那个文件夹,因为那里有许多其他的可执行文件,例如libtool,您可能不想优先考虑这些文件而不是系统安装的版本。这个问题最近阻止了我安装一个node包(libxmljs),如这里所记录。

我的解决方案是定义和导出mysqlmysqladmin作为函数:

# Export MAMP MySQL executables as functions
# Makes them usable from within shell scripts (unlike an alias)
mysql() {
    /Applications/MAMP/Library/bin/mysql "$@"
}
mysqladmin() {
    /Applications/MAMP/Library/bin/mysqladmin "$@"
}
export -f mysql
export -f mysqladmin

我使用函数而不是别名,因为别名不能被传递给子进程,或者至少在shell脚本的上下文中不会。唯一的缺点是运行which mysqlwhich mysqladmin将不再返回任何内容,这有点让人失望。如果您想检查正在使用哪个mysql并确保一切正常,请改用mysql --version

注意:@julianromera指出,zsh不支持导出函数,在这种情况下,最好使用别名,例如alias mysql='/Applications/MAMP/Library/bin/mysql'。只需注意,您的别名可能无法从子shell(例如执行shell脚本时)中使用。


3
这个解决方案优雅、可持续且绝对是天才之举。谢谢! - Matt van Andel
@julianromera 我一开始使用别名,但是根据我的经验,别名不会传递给子进程,或者至少在shell脚本的上下文中不会传递。因此,如果我运行一个使用mysql的shell脚本,它将无法找到我的别名,而是使用系统版本的mysql。无论如何,感谢你的提示!我会添加有关zsh的注释。 - Andrew Patton
1
这是一种非常酷的方法,但是MAMP上的最新版本PHP是7,大多数应用程序将在使用该版本时出现故障。我想知道是否有一种从配置文件中获取当前默认值的方法? - Christian
1
设置php的别名为MAMP二进制文件在El Capitan上无效,但将bin目录添加到PATH中可以。有人知道为什么吗?谢谢! - scald
1
在ls前使用“command”可以忽略预先存在的ls别名:command ls /Applications/MAMP/bin/php/ | sort -n | tail -1 - Pooch
显示剩余8条评论

15
每次您保存MAMP配置(PHP部分)时,它会将当前的PHP版本保存在“~/.profile”文件中,并创建别名来指向当前配置的版本的php、pear和pecl。(注意:您需要在MAMP中检查“使此版本在命令行上可用”选项)
但是,您需要刷新终端(打开另一个会话)才能刷新该文件。您也可以手动输入“source ~/.profile”以刷新别名。
如果您想提取此当前版本到一个PHP_VERSION变量 - 如上所述 - 以供进一步使用,您可以执行以下操作:
export PHP_VERSION=`grep "alias php" ~/.profile | cut -d"/" -f6 | cut -c4-`

然后您将使用MAMP的当前版本获得$PHP_VERSION。

最后,如果您想要在MAMP上使用当前配置的PHP版本运行代码,只需将以下内容添加到您的~/.bash_profile

export PHP_VERSION=`grep "alias php" ~/.profile | cut -d"/" -f6 | cut -c4-`
export PHPRC="/Library/Application Support/appsolute/MAMP PRO/conf/" #point to your php.ini folder to use the same php settings
export PATH=/Applications/MAMP/bin/php/php$PHP_VERSION/bin:$PATH
现在,即使是依赖于/usr/bin/env php的脚本也将从Mamp配置中读取正确的版本。

自动更新.profile是PRO版本的功能吗?我使用MAMP已经有大约10年了,一直都需要手动更新.profile。 - Weston Wedding

13

我发现在Mavericks 10.8上没有.bash_profile文件,而我的路径位于/etc/paths。

为了使新路径(无论是mamp还是brew安装的php)生效,需要将其放在该路径文件中默认的/usr/bin/php之前。例如:

/Applications/MAMP/bin/php/php5.3.6/bin
/usr/bin 

更改完成后,打开一个新的终端窗口并运行“which php”,这应该现在指向您更新后的路径。


我在Yosemite上。在您的建议之前,执行which php仍会产生正确的路径(因为我在我的.bash_profile中设置了路径),但是phpinfo()未显示已加载mcrypt(或php.ini中的任何其他扩展)。然而,执行此操作解决了这个问题,所以谢谢! - hamstu
1
你应该在你的主目录下创建自己的.bash_profile文件,这样你的更改只会影响到你自己。 - David Yell

10

你可能仍然会遇到mysql二进制文件未被发现的情况

open terminal, type
touch ~/.bash_profile; open ~/.bash_profile

按照以下方式进行编辑,保存并退出,然后重新启动终端或者采用其他方式

source ~/.bash_profile

在不重新启动终端的情况下执行新的PATH

并且按照上面DavidYell帖子中的方式,还可以添加以下内容。您可以通过导出后跟单个路径导出来堆叠各种变量,如下所示:

export MAMP_PHP=/Applications/MAMP/bin/php/php5.6.2/bin
export MAMP_BINS=/Applications/MAMP/Library/bin
export USERBINS=~/bins
export PATH="$USERBINS:$MAMP_PHP:$MAMP_BINS:$PATH"

加油


3
如果您需要输入
/Applications/MAMP/bin/php5.3/bin/php

在您的命令行中输入,然后添加

/Applications/MAMP/bin/php5.3/bin

将php添加到PATH环境变量中,这样您就可以从任何地方调用php。

是的,但是如何将其添加到PATH变量中呢? - sf_tristanb
1
导出路径:export PATH=$PATH:/Applications/MAMP/bin/php5.3/bin 你可能需要重新启动/重新连接终端才能使其生效(至少要同时打开不同的终端)。 - Kissaki
似乎这不是永久性的。当我打开新终端时,它使用默认的MAC php路径在/usr/bin/php - GusDeCooL
为了永久存储,您不仅需要将其保存到本地临时路径,还需要保存到系统路径。虽然我不熟悉MAC,但它可能是export PATH,以便在设置(修改)后持续存在。 - Kissaki

2
这个对我有效:
sudo mv /usr/bin/php /usr/bin/~php
sudo ln -s /Application/XAMPP/xamppfiles/bin/php /usr/bin/php

2
对于XAMPP用户,您可以使用以下方法:
# Use XAMPP version of PHP
export PATH=/Applications/XAMPP/xamppfiles/bin:$PATH
source ~/.bash_profile

你可以使用以下方式进行检查:

php -v

2
MAMP的最新版本(5+版本)提供了一种简单的方法,使MAMP PHP版本在命令行中可用。只需在侧边栏菜单中选择“PHP”,然后勾选“在命令行中使此版本可用”。轻松易懂!请参见附加的屏幕截图:)

screenshot


1
有时,这样做会更容易:
sudo ln -s /Applications/MAMP/bin/php/php5.6.10/bin/php /usr/bin/php;
发布时的Mamps PHP版本为php5.6.10,请确保将其更改为您正在使用的版本。
你很快就会好起来的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接