You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

如何在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识别的模块。

  1. 下载PHP 5.6源码
    去PHP官网下载PHP 5.6的最新稳定版(比如5.6.40),解压到本地目录,比如~/Downloads/php-5.6.40

  2. 编译前准备
    确保系统安装了Xcode Command Line Tools,没装的话先跑:

    xcode-select --install
    
  3. 编译配置(关键!)
    进入源码目录,执行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/
  4. 编译安装
    执行编译和安装命令,需要sudo权限:

    make && sudo make install
    
  5. 配置PHP.ini
    复制源码里的示例配置文件到安装目录:

    sudo cp php.ini-development /usr/local/php56/etc/php.ini
    

    你可以根据需求编辑这个php.ini,比如调整内存限制、时区等。

二、配置Apache实现版本切换

这里分两种场景:全局切换所有站点用PHP 5.6,或者单个站点单独指定PHP版本。

场景1:全局切换PHP版本

  1. 打开系统Apache的配置文件:
    sudo nano /etc/apache2/httpd.conf
    
  2. 找到系统自带的PHP 7.1模块加载行,注释掉:
    # LoadModule php7_module libexec/apache2/libphp7.so
    
  3. 添加PHP 5.6的模块加载行(编译时apxs已经帮你生成了libphp5.so,路径就是下面这个):
    LoadModule php5_module /usr/libexec/apache2/libphp5.so
    
  4. 重启Apache生效:
    sudo apachectl restart
    

场景2:站点级单独指定PHP版本

如果你想让部分站点用PHP 5.6,其他站点继续用系统的PHP 7.1,可以在虚拟主机配置里单独设置:

  1. 打开虚拟主机配置文件(如果没启用虚拟主机,先开启httpd.conf里的Include /private/etc/apache2/extra/httpd-vhosts.conf):
    sudo nano /etc/apache2/extra/httpd-vhosts.conf
    
  2. 在需要用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>
    
  3. 重启Apache生效:
    sudo apachectl restart
    
    这样这个站点就会用PHP 5.6,其他没修改的站点还是用系统的PHP 7.1。
三、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_profile
    
    之后在终端输入php56就是用5.6版本,输入php就是系统默认的7.1版本。
注意事项
  • 编译前如果遇到依赖缺失的错误,可以根据提示安装对应的Xcode组件(比如某些库需要手动安装,但High Sierra自带的库基本能满足PHP 5.6的需求)
  • 修改Apache配置前,记得备份原文件,避免配置错误导致Apache无法启动
  • 如果你的站点用了.htaccess,确保AllowOverride All已经开启,否则站点级的PHP配置可能不生效

内容的提问来源于stack exchange,提问作者Alexander Holsgrove

火山引擎 最新活动