- 首先安装brew
- brew 安装php71最新版本
- brew 安装nginx
- 安装一个php最新的版本
- 利用phpbrew安装多个版本
- 配置多个版本的php-fpm.conf
- 配置nginx
- 测试效果
jack$ xcode-select --install
# 先安装code的命令工具,如果提示已经安装,无需理会
jack$ brew install nginx
jack$ brew install php71
# brew自动帮忙安装php71的依赖
安装phpbrew 的php多版本管理工具 (官方文档:https://github.com/phpbrew/phpbrew)
jack$ curl -L -O https://github.com/phpbrew/phpbrew/raw/master/phpbrew
jack$ chmod +x phpbrew
# 配置环境变量
jack$ sudo mv phpbrew /usr/local/bin/phpbrew
# 初始化phpbrew的环境
jack$ phpbrew init
# (执行该命令 会生成一个目录~/.phpbrew, 一些相关的配置)
# 由于使用phpbrew安装php不同的版本,所需要的依赖。
# 然而brew已经把依赖都安装到 /user/local/Cellar目录下.
# 所以我们需要配置phpbrew 让他在/user/local/Cellar目录下查找相关的依赖
jack$ phpbrew lookup-prefix homebrew
# 把phpbrew 加到环境变量
jack$ [[ -e ~/.phpbrew/bashrc ]] && source ~/.phpbrew/bashrc
# 查看phpbrew所知道的 所有 php版本
jack$ phpbrew know --old
# 看到php 7.1.24版本,例如我需要装这个版本
# 在安装这个版本的前提下,先安装些依赖
jack$ brew install bzip2 zlib
# 接着 用phpbrew工具安装php 7.1.24版本
jack$ phpbrew install --old 7.1.24 +default+fpm +bz2=/usr/local/Cellar/bzip2/对应版本目录 -- --with-zlib=/usr/local/Cellar/zlib/对应的版本目录
# 解释
# --old 带上这个 参数,说明 如果没有这个版本,以old版本的形式去找到这个版本
# +default 表示 默认的那些扩展都给你安装,具体那些扩展,看文档
# +fpm 表示 如果没有此项,是不会给你安装fpm,只给你安装php 以及 php-cli
# +bz2表示,指定bzip2的安装目录
# -- --php安装依赖配置 注意一条横线都不能少 --空格--依赖
# -如果安装过程中,请查看安装日志,看看哪个日志没装上,目前php5.3版本,装不上,intl扩展有问题。
同理,用上面方法安装给一个php 5.4的版本
所有的php各个版本的目录都在 ~/.phpbrew/php/php-版本/目录下
phpbrew配置php-fpm
# 查看当前 phpbrew安装了哪些版本
jack$ phpbrew list
# 显示如下
# php-7.1.24
# php-5.4.38
# 切换php-7.1.24版本
jack$ phpbrew switch 7.1.24
#(这个命令可以看到是否切换成功,只要版本就是7.1.24就是切换成功)
jack$ php -v
# 在启动php-7.1.24版本前,先去配置文件配置下
jack$ cd ~/.phpbrew/php/php-7.1.24/etc
# 在这个目录下能看到 这个版本php的配置
jack$ vi php-fpm.conf
# 可以看到 最后配置的文件,在同等目录下的/php-fpm.d目录/*.conf后缀的文件
jack$ cd php-fpm.d
jack$ vi www.conf
# 找到
# user = nobody
# group = nobody
# 在这两个配置前面加上;
# ;user = nobody
# ;group = nobody
# 找到 listen =
# 我的配置是 listen = /php-fpm.sock
# 注意,我需要把所有的安装的版本php,都放到指定的一个目录下面
# 修改如:listen = /Users/你的mac用户名/.phpbrew/php-sock/php-fpm.sock;
# 最后启动php-fpm
jack$ phpbrew fpm start
# 我们能看到/Users/你的mac用户名/.phpbrew/php-sock/有一个 php-fpm.sock;
# 并且看下进程
jack$ ps -ef | grep php-fpm
# 都能看到相关pid文件,证明php-fpm 已经启动成功了
nginx配置
# 最后去nginx的配置文件
# nginx是用brew install nginx
jack$ cd /usr/local/etc/nginx
jack$ vi nginx.conf
# 文件内容修改如下
location / {
root 代码目录;
index index.php index.html index.htm;
}
location ~ \.php$ {
root /Users/jack/www;
#fastcgi_pass 127.0.0.1:9000;
# 注意了,下面是以sock文件去监听,而不以端口监听
# 我们把所有php版本的php-fpm.conf的listen都放到这个文件目录下
# 这样我们每切换一个版本,就无需要每次更改nginx了
fastcgi_pass unix:/Users/jack/.phpbrew/php-sock/php-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
# 在重启nginx前需要给sock文件的权限
jack$ chmox -R 777 /Users/jack/.phpbrew/php-sock/php-fpm.sock
# 重启nginx
jack$ nginx -t
jack$ nginx -s reload
phpbrew --debug install 7.3.16 +default +fpm +soap +mysql +pdo +bz2 +zlib --\
--with-config-file-path=/home/phpbrew/.phpbrew/php/php-7.3.16/etc\
--with-xpm=no --without-xpm\
--with-config-file-scan-dir=/home/phpbrew/.phpbrew/php/php-7.3.16/var/db\
--disable-all\
--enable-session\
--enable-short-tags\
--enable-libxml\
--enable-simplexml\
--enable-xmlreader\
--enable-xmlwriter\
--with-xsl\
--with-libxml-dir\
--enable-opcache\
--enable-calendar\
--enable-cli\
--enable-ctype\
--enable-dom\
--enable-fileinfo\
--enable-filter\
--enable-shmop\
--enable-sysvsem\
--enable-sysvshm\
--enable-sysvmsg\
--enable-json\
--with-mhash\
--with-mcrypt\
--enable-pcntl\
--with-pcre-regex\
--with-pear=/home/phpbrew/.phpbrew/php/php-7.3.16/lib/php/pear/\
--enable-phar\
--enable-posix\
--with-readline\
--enable-tokenizer\
--with-curl=/usr\
--with-openssl\
--with-mysqli\
--with-pdo-mysql\
--enable-pdo\
--with-mysql-sock=/tmp/mysql.sock\
--enable-fpm\
--enable-sockets\
--enable-mbstring\
--enable-mbregex\
--enable-bcmath\
--enable-xml\
--enable-zip\
--with-gd-dir\
--enable-gd-natf\
--with-jpeg-dir\
--with-png -enable-soap
安装扩展需分析
1. 先查看下~/.phpbrew/build/对应php版本/ext 看看是否有自己需要的扩展
2.如果没有自己需要的扩展,需要重新编译php,或者 利用phpize方式 进行编译扩展
3.如果有自己扩展,则只需要执行phpbrew ext install 扩展目录名称
遇到的坑!!
1. 发现 install curl 无法下载php,则需要自己官网去下载bz2的文件,并且放到~/.phpbrew/distfiles
如:
#安装5.4.38版本
jack$ curl -L https://www.php.net/get/php-5.4.38.tar.bz2/from/this/mirror -o ~/.phpbrew/distfiles/php-5.4.38.tar.bz2
2.phpbrew install 版本+扩展 有一些需要指定安装位置,如 +bz2=/usr/local/opt/bzip2
3.类似mysql,pdo 都需要 phpbrew install 版本 +mysql+pdo
4.phpbrew install <version> 需要用with等编译参数 必须格式 phpbrew install <version> -- --with, 不能少了中间的--
5. 安装扩展时候,先phpbrew use <version> -- --with,中间两个--不能少
6. 安装扩展时候,phpbrew ext install iconv -- --with-iconv-dir=/ 如果报错,请查看报错错误日志发现传递 --with-iconv,要看编译错误日志
7.安装完扩展后,Warning: PHP Startup: Invalid library (maybe not a PHP library) 'mysqli.so' in Unknown on line 0
可以不用管它,可能php-cli引入错误的php.ini导致
8.安装过程中,出险 syntax error near unexpected token `--description'
重新安装phpbrew
执行到 phpbrew init的时候,请注意执行完后的返回提示:
Phpbrew environment is initialized, required directories are created under
/home/phpbrew/.phpbrew
能发现, phpbrew相关文件在/home/phpbrew目录下,然而由于当前登录用户是root,所以cd ~的时候 目录是/root
因此需要把~的路径目录传成/home/phpbrew 如下[请勿直接复制文档的命令]
echo "[[ -e /home/phpbrew/.phpbrew/bashrc ]] && source /home/phpbrew/.phpbrew/bashrc" >> /home/phpbrew/.bashrc
source /home/phpbrew/.phpbrew/bashrc
9. checking for cURL 7.15.5 or greater... configure: error: cURL version 7.15.5 or later is required to compile php with cURL support
apt-get -y install curl libcurl4-openssl-dev