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

sf_*_*anb 52 php macos shell mamp path

完全搞砸我在PHP上的PHP配置试图让SOAP模块工作(-bash:/ usr/bin/php:没有这样的文件或目录....)我现在必须使用MAMP但每次我必须键入路径

Applications/MAMP/bin/php5.3/bin/php to do command line.
Run Code Online (Sandbox Code Playgroud)

如何只输入php而不是MAC上的整个路径?我仔细检查过,我没有名为.profilenor 的文件bash_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
Run Code Online (Sandbox Code Playgroud)

Dav*_*ell 128

/Users/Davidexmaple 的主文件夹中,您可以创建一个.bash_profile.在这里,您可以导出变量,然后将它们添加到您的路径中.

打开文件在你喜欢的编辑器中编辑它,我使用vim.

然后你可以添加你的路径

export MAMP_PHP=/Applications/MAMP/bin/php/php5.3.6/bin
export PATH="$MAMP_PHP:$PATH"
Run Code Online (Sandbox Code Playgroud)

您希望您的位置优先于$PATH已经包含/usr/bin的系统PHP所在的位置.因此系统将始终首先找到您的MAMP版本.

保存此文件,然后重新启动终端,您将看到您应该获得您的MAMP版本.

测试我php -v用作OSX Lion使用5.3.10并且我的MAMP使用5.3.6
您还可以测试使用which php哪个将输出当前php可执行文件的路径.


And*_*ton 104

以前接受的答案是指php 5.3.6这一事实,而当前版本的MAMP默认使用7.2.1(截至2018年初),指出这不是一个非常可持续的解决方案.您可以通过向您添加额外的行来自动更新路径,.bash_profile以从中获取最新版本的PHP /Applications/MAMP/bin/php/并将其导出到您的路径.我是这样做的:

# 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
Run Code Online (Sandbox Code Playgroud)

(source ~/.bash_profile进行更改后使用以确保它们生效.)

正如其他人所提到的,你可能也想修改你的shell以使用MAMP的mysql可执行文件,它位于/Applications/MAMP/Library/bin.但是,我建议导出该文件夹,因为那里有许多其他可执行文件,例如libtool,您可能不希望优先考虑系统安装的版本.这个问题使我无法安装最近的节点包(libxmljs),如此处所述.

我的解决方案是定义和导出mysql以及mysqladmin作为功​​能:

# 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
Run Code Online (Sandbox Code Playgroud)

我使用函数而不是别名,因为别名不会传递给子进程,或者至少不会传递给shell脚本的上下文.我发现的唯一缺点是跑步which mysql并且which mysqladmin不再返回任何东西,这是一个无赖.如果你想检查使用哪个mysql并确保一切都是copacetic,请mysql --version改用.

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

  • 这个解决方案优雅,可持续,绝对是天才.谢谢! (3认同)

Ric*_*ins 13

每次保存 MAMP 配置(PHP 部分)时,它都会在~/.profile文件中保存当前版本的 PHP,并为 php、pear 和 pecl 创建别名,以指向当前配置的版本。(注意:您需要在 MAMP 中选中“使此版本在命令行上可用”选项)

但是,您需要刷新终端(打开另一个会话)才能刷新此文件。您还可以键入source ~/.profile以手动刷新别名。

如果您想在 PHP_VERSION 变量中提取此当前版本 - 如上所述 - 以供进一步使用,您可以执行以下操作:

export PHP_VERSION=`grep "alias php" ~/.profile | cut -d"/" -f6 | cut -c4-`
Run Code Online (Sandbox Code Playgroud)

然后您将有 $PHP_VERSION 可用于当前版本的 MAMP。

最后,如果你想在 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
Run Code Online (Sandbox Code Playgroud)

现在,即使是依赖的脚本/usr/bin/env php也会从 Mamp 配置中读取正确的版本。


Ope*_*ned 12

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

为了获得新路径(无论这是php的mamp还是brew安装)生效,它需要高于此路径文件中的默认/ usr/bin/php.例如.

/Applications/MAMP/bin/php/php5.3.6/bin
/usr/bin 
Run Code Online (Sandbox Code Playgroud)

在更改之后,打开一个新的终端窗口并运行现在应指向更新路径的"php"


小智 8

你可能仍然遇到以这种方式找不到的mysql二进制文件

open terminal, type
touch ~/.bash_profile; open ~/.bash_profile
Run Code Online (Sandbox Code Playgroud)

编辑如下,保存,完全重新启动终端或交替

source ~/.bash_profile
Run Code Online (Sandbox Code Playgroud)

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

并且以上面DavidYell的帖子的方式,还添加以下内容.您可以通过导出它们来堆叠各种变量,然后是我在下面演示的单个PATH导出

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"
Run Code Online (Sandbox Code Playgroud)

干杯