php多個新舊版本安裝 for mac phpbrew

安裝步驟:

  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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章