【发布时间】:2011-05-14 19:17:18
【问题描述】:
我想使用 MAMP 的 PHP 版本,而不是我的 mac 上安装的默认版本。我尝试使用
ln -s /Applications/MAMP/bin/php5.3/bin/php php
但我收到“文件存在”错误。解决此问题的最佳方法是什么,以便我可以输入 php 而不是完整路径?
【问题讨论】:
我想使用 MAMP 的 PHP 版本,而不是我的 mac 上安装的默认版本。我尝试使用
ln -s /Applications/MAMP/bin/php5.3/bin/php php
但我收到“文件存在”错误。解决此问题的最佳方法是什么,以便我可以输入 php 而不是完整路径?
【问题讨论】:
我不建议尝试修改在命令行上调用的 PHP 的默认版本。如果您决定升级操作系统,这样做可能会破坏系统的其他部分,并在将来给您带来问题。
有一个替代方案可以满足您的需求。您可以为您的 MAMP 的 php 5.3 副本创建一个别名。在我的例子中,我将别名命名为 phpmamp。打开终端并输入:
alias phpmamp='/Applications/MAMP/bin/php5.3/bin/php'
现在,在命令行输入 phpmamp 将启动 MAMP php interperter。通过键入验证这一点:
phpmamp --help
您很可能希望将此以及任何其他别名存储在 ~/.bash_profile 中,这将允许别名在重新启动后保持不变。否则,别名应该只适用于您所在的特定终端会话。有关创建.bash_profile 文件的更多信息可以在此处找到:
http://www.redfinsolutions.com/redfin-blog/creating-bashprofile-your-mac
【讨论】:
phpmamp,并在 /usr/local/bin 而不是应用程序中创建它?这不是更好的方法吗,因为它会在重新启动后持续存在而无需编辑 bash_profile,并且它将更容易跟踪/记住您创建它,因为它存在于 bin 目录中,而不是被隐藏在 bash 配置文件脚本中。
我在原始 php 位置创建了一个符号链接。
1.使用以下命令找到您的 osx php 版本:
which php
结果应该是:
/opt/local/bin/php
2。备份(移动)你原来的 php 二进制文件:
sudo mv /opt/local/bin/php /opt/local/bin/php.bak
3.创建符号链接:
sudo ln -s /Applications/MAMP/bin/php/php5.4.4/bin/php /opt/local/bin/php
4.运行新的 php 版本:
php -v
PS:
为了在 El-Capitan 上工作
csrutil disable
sudo ln -s /Applications/MAMP/bin/php/php5.4.4/bin/php /opt/local/bin/php sudo ln -s /Applications/MAMP/bin/php/php5.4.4/bin/php /usr/bin/php
csrutil enable
【讨论】:
Catalina 10.15.6, mv: rename /usr/bin/php to /usr/bin/php.bak: Operation not permitted
我不想篡改当前文件,所以我只是将 MAMP PHP bin 文件夹添加到 $PATH env 变量中。
您可以编辑~/.bash_profile并将以下行添加到顶部
export PATH="/Applications/MAMP/bin/php/php5.6.1/bin:$PATH"
只需将 PHP 版本更改为您正在使用的当前版本即可。
编辑文件后别忘了source ~/.bash_profile。
【讨论】:
which php,它给了我/Applications/MAMP/bin/php/php7.1.8/bin/php。所以我首先检查了 Mamp 的安装目录并找出了有哪些版本。然后我运行vim ~/.bash_profile,将php的导出路径更改为7.0.22。然后我跑了source ~/.bash_profile。就是这样,现在当我在命令行中运行 which php 时,我得到:/Applications/MAMP/bin/php/php7.0.22/bin/php 一切都像魅力一样运行。
到目前为止,我对我在网上找到的结果/解决方案并不满意,因为 php.ini 配置并未在所有情况下和所有系统上都正确加载,尤其是当您需要像 ioncube 和其他(在 MAMP Pro 上更令人困惑)。这就是为什么我创建了自己的 php 版本别名(带有配置),所以我想出了以下解决方案,例如(基于 MAMP Pro,记得根据您的需要调整 php.ini 路径):
编辑你的 .bash_profile
vim ~/.bash_profile
并添加以下条目:
alias php55="/Applications/MAMP/bin/php/php5.5.26/bin/php -c '/Library/Application Support/appsolute/MAMP PRO/conf/php5.5.26.ini'"
alias php56="/Applications/MAMP/bin/php/php5.6.10/bin/php -c '/Library/Application Support/appsolute/MAMP PRO/conf/php5.6.10.ini'"
alias php56cgi="/Applications/MAMP/bin/php/php5.6.10/bin/php-cgi -c '/Library/Application Support/appsolute/MAMP PRO/conf/php5.6.10.ini'"
在当前终端会话中重新初始化 .bash_profile(否则您将看不到任何更改,除非您重新启动终端):
source ~/.bash_profile
如果你安装了一些额外的模块,那么你可以用 php56 -v 测试它,你应该得到 ioncube 等模块的输出。否则用 php56 -i | 测试它grep "yourModuleNameOrSomethingElse"
现在您可以在终端中轻松使用其中一个 php 版本,例如“php56”,并加载所有配置。因此,它非常适合通过所有版本迭代测试和构建您的应用程序,包括通过终端进行正确的 php.ini 配置。
对于普通的 MAMP 用户,我认为配置应该位于 /Applications/MAMP/conf/ 中。快乐编程。
【讨论】:
嗯,“文件存在”错误可能是因为您尝试使用已经存在的文件名创建符号链接。我假设您在包含您尝试替换的 php 版本的目录中,或者这是第二次尝试并且您没有首先删除现有的符号链接。我同意其他人关于不“替换/修改”默认版本的 php。
根据问题的第二部分,最好的方法是避免输入完整路径,建议使用别名的答案是正确的。但是,当涉及多个版本时,这意味着必须调用 php 以外的其他东西来运行您想要运行的版本。
我有一个脚本,可以让我“选择”我想使用的 php 版本,然后创建一个指向该版本的符号链接,让我在想要使用时简单地输入“php”作为我的命令它。我写了一篇关于它的博客here,您可以在其中获取脚本。根据@ioCron 给出的答案,我可能需要重新访问我的脚本以说明与每个版本关联的不同配置文件夹。
【讨论】:
好吧,这一切都不适用于 OSX10.12.5
我在 /opt/local/bin 安装了 mac ports php70
哪个php显示:
/usr/bin/php
我设置了别名和本地路径等,这主要对我有用,但其他程序失败(如作曲家)所以我的解决方案是预先添加:
/opt/local/bin
/opt/local/sbin
到文件 /etc/paths
然后这一切都很有魅力!
【讨论】:
最新版本的 MAMP(版本 5+)提供了一种使 MAMP PHP 版本可用于命令行的简单方法。只需在侧栏菜单中选择“PHP”并选中“使此版本在命令行上可用”。十分简单! :)
【讨论】:
如果您的终端正在使用 zsh (oh-my-zosh),如附件所示。 check image 执行以下操作。
Mac Big Sur 使用“zsh”Oh-my-zosh 作为终端。所以,我做了以下事情。
如果您需要帮助,请告诉我。
【讨论】:
适用于 Mac OS Catalina。查找目录/Users/<user_name>/.zprofile
并添加(例如)
# MAMP PRO PHP
export PATH="/Applications/MAMP/bin/php/php7.4.2/bin:$PATH"
重启后,在终端中
which php
新的php版本/Applications/MAMP/bin/php/php7.4.2/bin/php
【讨论】:
2021 - 对于那些使用 ohmyzsh 的人,要编辑的文件是:
/Users/your_user/.zshrc
所以,你可以编辑这个文件并添加路径:
export PATH=/Applications/MAMP/bin/php/php8.0.0/bin:$PATH
与 Big Sur 完美搭配
【讨论】: