当前位置: 首页 > 工具软件 > PHPBrew > 使用案例 >

php多个新旧版本安装 for mac phpbrew

龙俊英
2023-12-01

安装步骤:

  1. 首先安装brew
  2. brew 安装php71最新版本
  3. brew 安装nginx
  4. 安装一个php最新的版本
  5. 利用phpbrew安装多个版本
  6. 配置多个版本的php-fpm.conf
  7. 配置nginx
  8. 测试效果

安装过程:

 

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

 类似资料: