安裝步驟:
- 首先安裝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