我遇到的所有问题都源于尝试安装 PHP 的 mcrypt。昨晚我放弃了,按照教程如何安装全新的 apache2 和 php5.3.3。我使用 macports 完成此操作
遗憾的是,昨晚我没有启用 mcrypt,尽管我很高兴能运行 5.3.3 :)
问题是,我今天早上醒来发现我的 php 版本又降回了 5.3.1,这只能意味着 OS X 已经恢复到我原来的 Apache 和 PHP。
我如何告诉 OS X 使用我通过 macports 安装的软件?
(然后我会问一个新问题:如何启用 mcrypt)
NB我可以通过在系统首选项中停止当前的 Web 共享,然后在终端中执行此操作来加载 macports 安装
sudo /opt/local/apache2/bin/apachectl -k restart
答案1
这并不是说您的 Apache/PHP 版本已被恢复 - 只是加载了错误的版本。
如果您启用了 Mac OS X 的 Web 共享,它将自动启用 Apple 使用 LaunchDaemon 提供的 Apache 和 PHP 版本org.apache.httpd.plist
(/System/Library/LaunchDaemons
这将覆盖 MacPorts 版本)。您可以通过在共享偏好设置窗格中关闭 Web 共享或运行 来禁用此功能sudo launchctl unload -w /System/Library/LaunchDaemons/org.apache.httpd.plist
。
当您安装适用于 MacPorts 的 Apache 时,它会安装一个 LaunchDaemon,/Library/LaunchDaemons
如果启用,它将自动启动 MacPorts 版本的 Apache。要启用它,请运行它sudo launchctl load -w /Library/LaunchDaemons/org.macports.apache2.plist
,然后您就可以开始比赛了。
如果你正在运行apachectl
重新启动 - 请确保你选择了正确的版本。你可能需要修改你的 $PATH 以/opt/local/apache2/bin
使其/usr/sbin
至于使用哪个版本的 PHP;在命令行上这将取决于您的 $PATH,而对于 Apache,它完全取决于您对 libphp5 模块位置的配置。(/etc/apache2/
对于内置版本,/opt/local/apache2/conf
对于安装的 MacPorts 版本)
答案2
正如 Ayaz 所建议的,您需要编辑 plist。正确的路径应该是/System/Library/LaunchDaemons/org.apache.httpd.plist
。
为了确保运行正确的apachectl
,请修改PATH
shell 启动脚本中的环境变量(例如~/.bash_profile
或~/.zshrc
任何其他脚本),使其/opt/local/apache2/bin
位于 之前/usr/sbin
。在 bash 中,将 macports apache 目录添加到 前面的语法是:
export PATH=/usr/local/apache2/bin:$PATH
答案3
另一个修复方法是将 apachectl 符号链接到 /usr/sbin/apachectl
$ su -
# mv /usr/sbin/apachectl /usr/sbin/apachectl.mac_version
# ln -s /opt/local/apache2/bin/apachectl /usr/sbin/apachectl
答案4
嗯...您知道可以在“系统偏好设置”->“共享”中激活“个人 Web 共享”。您是否想让该复选框激活您的自定义 Apache 版本而不是捆绑版本?
我不知道这是否可行,但我不建议这样做。更好的办法是停用基本版本并单独使用自定义版本。
您已经完成了第 1 步,即在“系统偏好设置”中关闭默认服务器。要使自定义版本在启动时加载,请调查您提到的 /Library/LaunchDaemons/org.apache.httpd.plist 文件。有关使用这些文件的更多信息,请参阅 $man launchctl,以及这个方便的软件叫 Lingon。
使用这些工具(也许是 $ps -ax|grep httpd),您应该能够确保正在运行的 Apache 版本是自定义的 MacPorts 安装。
哦,这让我想到了其他东西:apachectl 不是服务器,它只是用来控制服务器(即 httpd)的实用程序。也许 MacPorts apachectl 正在启动捆绑的 httpd?或者也许 MacPorts httpd 正在使用捆绑的 PHP...
就我个人而言,我解决这个问题的方法是根据需要升级 PHP 来改变已安装的 apache 版本,但希望您可以使用其中的一些方法来继续进行故障排除。