Mac 10.9.5内置PHP服务器升级OpenSSL问题求助
咱们先拆解下你遇到的核心问题:系统全局的openssl已经是1.0.2n了,但Apache加载的PHP模块还绑定着旧版的OpenSSL 0.9.8zg——这是因为你升级的PHP要么没在编译时关联新版OpenSSL,要么Apache仍然在使用系统自带的mod_php模块,而非你新安装的PHP版本。
下面给你两种可行的解决思路,重点讲你提到的「安装独立Apache+PHP」的方案:
一、先确认问题根源
先执行这条命令,查看当前PHP的编译参数:
php -i | grep "Configure Command"
如果输出里没有--with-openssl参数,或者参数后的路径指向/usr/lib(系统自带OpenSSL的位置),那就是编译PHP时没关联新版OpenSSL导致的。
二、方案1:修复现有PHP的OpenSSL关联
如果不想换独立Apache,只需要重新编译PHP,指定新版OpenSSL的路径:
- 先确保你已经安装了新版OpenSSL(比如通过Homebrew安装的
/usr/local/opt/openssl) - 重新编译PHP时,加上以下参数:
./configure --with-openssl=/usr/local/opt/openssl [其他你需要的编译参数] make && make install - 重启Apache,再看phpinfo()里的OpenSSL版本是否更新。
三、方案2:安装独立的Apache+PHP(推荐)
因为Mac OSX Server自带的Apache和PHP绑定很深,容易出现版本冲突,直接换成Homebrew管理的独立组件会更省心:
步骤1:安装Homebrew(Mac包管理工具)
如果还没装,执行这条命令:
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
安装完成后,执行brew update确保包索引是最新的。
步骤2:安装新版OpenSSL
brew install openssl
安装后,按照brew的提示,把新版OpenSSL加入环境变量,让系统优先使用它:
echo 'export PATH="/usr/local/opt/openssl/bin:$PATH"' >> ~/.bash_profile source ~/.bash_profile
执行openssl version确认版本是1.0.2n(或更高)。
步骤3:安装独立Apache
brew install httpd
这会安装Apache 2.4版本(比系统自带的2.2新很多)。安装完成后,brew会告诉你配置文件路径是/usr/local/etc/httpd/httpd.conf,启动命令是brew services start httpd。
步骤4:安装指定版本的PHP
如果你需要PHP 5.4,因为brew默认仓库已经移除了旧版本,需要先添加第三方tap:
brew tap exolnet/homebrew-deprecated brew install php@5.4
安装时brew会自动关联新版OpenSSL,无需额外参数。安装完成后,查看PHP模块路径:
ls /usr/local/opt/php@5.4/lib/httpd/modules/
应该能看到libphp5.so文件。
步骤5:配置Apache加载新PHP模块
编辑/usr/local/etc/httpd/httpd.conf:
- 找到
LoadModule部分,添加PHP模块的加载指令(路径替换成你刚才看到的):LoadModule php5_module /usr/local/opt/php@5.4/lib/httpd/modules/libphp5.so - 找到
AddHandler部分,添加PHP脚本处理:AddHandler php5-script .php - 找到
DirectoryIndex,把index.php加到最前面:DirectoryIndex index.php index.html - 可选:修改
DocumentRoot到你常用的网站目录,比如/Users/你的用户名/Sites,同时修改对应的<Directory>块的权限设置。
步骤6:禁用系统自带的Apache
因为Server.app可能会自动启动系统Apache,需要彻底禁用:
sudo apachectl stop sudo launchctl unload -w /System/Library/LaunchDaemons/org.apache.httpd.plist
同时打开Server.app,关闭「Web服务」功能。
步骤7:验证结果
- 重启新安装的Apache:
brew services restart httpd - 在
DocumentRoot目录下创建phpinfo.php文件,内容:<?php phpinfo(); ?> - 访问
http://localhost/phpinfo.php,查看OpenSSL版本,应该和openssl version的输出一致了。
额外注意事项
- 如果你后续需要用Server.app的其他功能,确保它不会重新启用系统Apache,否则会和独立Apache冲突。
- 用Homebrew安装的组件可以通过
brew upgrade随时更新,比系统自带的维护更方便。
内容的提问来源于stack exchange,提问作者Henk

