标签 multiple-php 下的文章

一直以来,macos上的PHP开发环境除了常规的虚拟机姿势以外,系统自带的apache+php也是可选项之一

后来系统自带的PHP环境满足不了要求,又懒得倒腾虚拟机,采用了一个第三方一键脚本环境:https://php-osx.liip.ch/

用得挺身心的,一直到系统升级了了mojave的大版本,系统自带的apache版本和https://php-osx.liip.ch/的类库冲突,导致服务不能正常启动,解决版本就是卸载系统自带的apache,采用brew安装,那么既然重新装了,索性连PHP环境也整体更新吧,毕竟现在是7.X版本为主了,5.X都是一些历史项目兼容需要

过程记录如下:

  1. 首先确保系统brew已经安装且 brew update 后正常状态
  2. 卸载老版本的PHP,这一点php-osx比较好,删除/usr/local/php5 所在的软链和原文件夹即可
  3. 停止系统自带apache服务并卸载

    sudo apachectl stop
    sudo launchctl unload -w /System/Library/LaunchDaemons/org.apache.httpd.plist 2>/dev/null

  4. 通过brew安装apache

    brew install httpd

期间配置省略,附带若干常用命令

sudo brew services start httpd

sudo apachectl start
sudo apachectl stop
sudo apachectl -k restart
  1. 安装PHP环境,如果需要PHP5.X则需要额外支持

    brew tap exolnet/homebrew-deprecated
    2020年12月12 更新 ,因为openssl和icu4c的版本问题,上面这个包没有很好解决
    [email protected] 换下面的安装方式
    brew tap shivammathur/php
    brew install shivammathur/php/[email protected]

    安装PHP
    brew install [email protected]
    brew install [email protected]
    brew install [email protected]
    brew install [email protected]

安装顺序执行后的PHP版本是7.3的,如果我们要PHP5.X版本,则执行如下命令

brew unlink [email protected] && brew link --force --overwrite [email protected]
  1. 在/usr/local/etc/httpd/httpd.conf 的如下地方加入以下配置

    LoadModule rewrite_module lib/httpd/modules/mod_rewrite.so
    LoadModule php5_module /usr/local/opt/[email protected]/lib/httpd/modules/libphp5.so

    LoadModule php7_module /usr/local/opt/[email protected]/lib/httpd/modules/libphp7.so

    LoadModule php7_module /usr/local/opt/[email protected]/lib/httpd/modules/libphp7.so

    LoadModule php7_module /usr/local/opt/[email protected]/lib/httpd/modules/libphp7.so

重启apache即可生效

最后如果我们要切换PHP版本
可以在/usr/local/bin 里面安装一个sphp可执行shell

$ curl -L https://gist.githubusercontent.com/rhukster/f4c04f1bf59e0b74e335ee5d186a98e2/raw > /usr/local/bin/sphp
$ chmod +x /usr/local/bin/sphp

确保sphp所在的bin目录在$PATH中,最后可以随意的切换了

在命令行中输入 sphp 7.3即可

本文参考翻译自https://getgrav.org/blog/macos-mojave-apache-multiple-php-versions