我遇到了同样的问题,罪魁祸首是相当迟钝。最终 OSX 试图包含一个不存在的 php 版本,但是由于自制 httpd 优先,OSX httpd 也无法直接访问。这是我修复它的方法:
第一:brew unlink httpd
然后which httpd透露了以下内容:/usr/sbin/httpd
此时我跑了sudo /usr/sbin/httpd -k stop,真正的罪魁祸首现身了:
httpd: Syntax error on line 527 of /private/etc/apache2/httpd.conf: Syntax error on line 8 of /private/etc/apache2/other/+php-osx.conf: Cannot load /usr/local/php5/libphp5.so into server: dlopen(/usr/local/php5/libphp5.so, 10): Symbol not found: _environ\n Referenced from: /usr/local/php5/libphp5.so\n Expected in: /usr/sbin/httpd\n in /usr/local/php5/libphp5.so
然后我用sudo vi /private/etc/apache2/httpd.conf 修复了这个问题,并注释掉了该文件中的所有行,并运行了以下代码:
sudo launchctl unload -w /System/Library/LaunchDaemons/org.apache.httpd.plist
这说明:
/System/Library/LaunchDaemons/org.apache.httpd.plist: Could not find specified service
根本问题是本机 OSX 实例仍在运行,但由于 PHP 未找到问题已与 launchctl 分离。所以基本上launchctl认为它已经正确关闭了进程,但是apachectl代理由于PHP错误拒绝停止,导致解耦进程,只有在自制版本也被取消链接时才能直接控制。
注释掉原生 PHP 包含让我可以毫无问题地运行 sudo apachectl -k stop。
整理好之后就跑了
brew link httpd
紧随其后
brew services restart httpd
利润。