如何在OSX High Sierra上不借助Homebrew/MacPorts安装PHP5.6并切换版本
我之前在High Sierra上折腾过一模一样的需求,给你分享一套亲测有效的方案,完全不用Homebrew或者MacPorts:
一、手动编译安装PHP 5.6(与系统PHP 7.1共存)
核心是把PHP 5.6装到独立目录,避免覆盖系统自带的PHP 7.1,同时编译时指定系统Apache的apxs工具,生成能被系统Apache识别的模块。
下载PHP 5.6源码
去PHP官网下载PHP 5.6的最新稳定版(比如5.6.40),解压到本地目录,比如~/Downloads/php-5.6.40。编译前准备
确保系统安装了Xcode Command Line Tools,没装的话先跑:xcode-select --install编译配置(关键!)
进入源码目录,执行configure命令,重点是指定安装路径和系统Apache的apxs路径:cd ~/Downloads/php-5.6.40 ./configure \ --prefix=/usr/local/php56 \ --with-apxs2=/usr/sbin/apxs \ --enable-cli \ --with-config-file-path=/usr/local/php56/etc \ --with-mysqli \ --with-pdo-mysql \ --with-openssl \ --with-zlib \ --with-gd \ --enable-mbstring \ --enable-xml解释一下关键参数:
--prefix=/usr/local/php56:把PHP 5.6装到这个独立目录,不会干扰系统PHP--with-apxs2=/usr/sbin/apxs:用系统Apache的apxs工具生成Web模块,这样编译好的libphp5.so会自动放到系统Apache的模块目录(/usr/libexec/apache2/)
编译安装
执行编译和安装命令,需要sudo权限:make && sudo make install配置PHP.ini
复制源码里的示例配置文件到安装目录:sudo cp php.ini-development /usr/local/php56/etc/php.ini你可以根据需求编辑这个
php.ini,比如调整内存限制、时区等。
二、配置Apache实现版本切换
这里分两种场景:全局切换所有站点用PHP 5.6,或者单个站点单独指定PHP版本。
场景1:全局切换PHP版本
- 打开系统Apache的配置文件:
sudo nano /etc/apache2/httpd.conf - 找到系统自带的PHP 7.1模块加载行,注释掉:
# LoadModule php7_module libexec/apache2/libphp7.so - 添加PHP 5.6的模块加载行(编译时apxs已经帮你生成了
libphp5.so,路径就是下面这个):LoadModule php5_module /usr/libexec/apache2/libphp5.so - 重启Apache生效:
sudo apachectl restart
场景2:站点级单独指定PHP版本
如果你想让部分站点用PHP 5.6,其他站点继续用系统的PHP 7.1,可以在虚拟主机配置里单独设置:
- 打开虚拟主机配置文件(如果没启用虚拟主机,先开启
httpd.conf里的Include /private/etc/apache2/extra/httpd-vhosts.conf):sudo nano /etc/apache2/extra/httpd-vhosts.conf - 在需要用PHP 5.6的虚拟主机块里添加以下配置:
<VirtualHost *:80> ServerName php56-demo.local DocumentRoot "/Users/你的用户名/Sites/php56-demo" DirectoryIndex index.php index.html # 启用PHP 5.6模块并禁用PHP 7.1模块 <IfModule php7_module> DisableModule php7_module </IfModule> LoadModule php5_module /usr/libexec/apache2/libphp5.so # 让Apache识别PHP文件 <FilesMatch \.php$> SetHandler application/x-httpd-php </FilesMatch> # 目录权限配置 <Directory "/Users/你的用户名/Sites/php56-demo"> AllowOverride All Require all granted </Directory> </VirtualHost> - 重启Apache生效:
这样这个站点就会用PHP 5.6,其他没修改的站点还是用系统的PHP 7.1。sudo apachectl restart
三、CLI版本切换
如果需要在终端切换PHP版本,很简单:
- 直接用绝对路径调用对应版本:
# 用PHP 5.6 /usr/local/php56/bin/php -v # 用系统PHP 7.1 /usr/bin/php -v - 或者在
~/.bash_profile里添加别名,方便快速切换:
之后在终端输入echo 'alias php56="/usr/local/php56/bin/php"' >> ~/.bash_profile echo 'alias php="/usr/bin/php"' >> ~/.bash_profile source ~/.bash_profilephp56就是用5.6版本,输入php就是系统默认的7.1版本。
注意事项
- 编译前如果遇到依赖缺失的错误,可以根据提示安装对应的Xcode组件(比如某些库需要手动安装,但High Sierra自带的库基本能满足PHP 5.6的需求)
- 修改Apache配置前,记得备份原文件,避免配置错误导致Apache无法启动
- 如果你的站点用了.htaccess,确保
AllowOverride All已经开启,否则站点级的PHP配置可能不生效
内容的提问来源于stack exchange,提问作者Alexander Holsgrove




