CentOS 下多版本 PHP 的安裝與配置

Hello-world發表於2019-08-30
  1. 話題背景
    因專案需求,要使用新版本 Laravel 框架,當前 PHP 版本只能支援到 Laravel 5.1 ,使用 composer 拉取 Laravel 5.5 框架,配置好 nginx 後訪問本地域名,效果如下
    Centos 下多版本 PHP 的安裝與配置
    再次使用 composer 拉取 Laravel 5.8 框架,報錯如下
    Centos 下多版本 PHP 的安裝與配置
    當然,文件有提到 Laravel 5.5 版本 PHP >= 7.0.0Laravel 5.8 版本 PHP >= 7.1.3
    而當前環境 PHP 版本
    Centos 下多版本 PHP 的安裝與配置
    於是考慮是不是該換個 PHP 版本了~
    (困惑:為什麼5.5版本也沒跑起來呢?)
  2. 本地環境
    • 作業系統:macOS 10.12.6
    • 執行環境:docker Centos 7
    • Nginx:nginx/1.12.2
    • PHP:php 7.0.29/php 5.5.38
    • composer:1.9.0
  3. 安裝準備

檢視已經安裝的 PHP 及其位置

[root]# locate */php

這一步可能出現的錯誤

-bash: locate: command not found

解決辦法

[root]# yum install mlocate
[root]# updatedb

再次執行命令

[root]# locate */php

即可看到已安裝版本及位置

  1. 開始安裝
  • 下載原始碼

由於已經存在兩個 PHP 版本,現在下載7.3.8版本,與之放在同一目錄,方便管理:

[root ~]# cd /usr/local/
[root local]# wget http://am1.php.net/distributions/php-7.3.8.tar.bz2
[root local]# cd php-7.3.8
  • 安裝依賴庫及模組

    [root php-7.3.8]# yum -y install libxml2-devel curl-devel libpng libpng-devel libxslt libxslt-devel
    [root php-7.3.8]# ./configure --prefix=/usr/local/php73 --with-curl --with-freetype-dir --with-gd --with-gettext --with-iconv-dir --with-kerberos --with-libdir=lib64 --with-libxml-dir --with-mysqli --with-openssl --with-pcre-regex --with-pdo-mysql --with-pdo-sqlite --with-pear --with-png-dir --with-xmlrpc --with-xsl --with-zlib --enable-fpm --enable-bcmath -enable-inline-optimization --enable-mbregex --enable-mbstring --enable-opcache --enable-pcntl --enable-shmop --enable-soap --enable-sockets --enable-sysvshm --enable-sysvmsg --enable-sysvsem --enable-xml --enable-zip --with-fpm-user=nginx --enable-ftp --enable-exif --enable-session --with-mhash --with-ldap
    這一步可能出現的錯誤

    configure: error: Cannot find ldap.h
    解決辦法

    [root php-7.3.8]# yum install openldap openldap-devel -y

  • 編譯

    [root php-7.3.8]# make

之一步可能出現的錯誤

/usr/local/src/php-7.3.8/ext/xmlrpc/libxmlrpc/encodings.c:73: undefined reference to `libiconv_open'
/usr/local/src/php-7.3.8/ext/xmlrpc/libxmlrpc/encodings.c:81: undefined reference to `libiconv'
/usr/local/src/php-7.3.8/ext/xmlrpc/libxmlrpc/encodings.c:101: undefined reference to `libiconv_close'
collect2: ld returned 1 exit status
make: *** [sapi/fpm/php-fpm] 錯誤 1

解決辦法

在執行完 ./configure … 之後,修改 Makefile 檔案中的 EXTRA_LIBS 行,在最後新增 -liconv ,儲存退出

[root php-7.3.8]# vim Makefile
...
[root php-7.3.8]# wq

再次執行命令

[root php-7.3.8]# make

可能需要等待一段時間,執行成功後效果如下
CentOS 下多版本 PHP 的安裝與配置

  • 安裝

    [root php-7.3.8]# make install
    成功後會在 /usr/local 目錄下出現 php73 資料夾

  • 準備配置檔案

    [root php-7.3.8]# cp php.ini-production /usr/local/php73/etc/php.ini
    [root php-7.3.8]# cd /usr/local/php73/etc/
    [root etc]# cp php-fpm.conf.default php-fpm.conf
    [root etc]# cd php-fpm.d
    [root php-fpm.d]# cp www.conf.default www.conf
    編輯 www.conf 檔案,可修改其中的 usergroup 為 www ,如果安裝了其他版本 PHP ,可能要修改 listen 埠號,防止衝突,這裡改為 127.0.0.1:9001 ,儲存退出

  • 啟動 php-fpm

    [root php-fpm.d]# cd /usr/local/php73/sbin/
    [root sbin]# ./php-fpm
    如果這一步沒有報錯,則安裝成功

    1. 切換版本

檢視當前 PHP 版本

[root ~]# php -v

效果如下
CentOS 下多版本 PHP 的安裝與配置
切換到剛剛安裝的版本

[root ~]# export PATH=/usr/local/php73/bin:$PATH

再次檢視 PHP 版本

[root ~]# php -v

效果如下
CentOS 下多版本 PHP 的安裝與配置

  1. 修改環境變數

將剛安裝的 PHP 新增到環境變數

[root ~]# vim /etc/profile

export PATH=/usr/local/php7/bin:/usr/local/php/bin:$PATH 修改為 export PATH=/usr/local/php73/bin:/usr/local/php7/bin:/usr/local/php/bin:$PATH ,儲存退出

執行命令

[root ~]# source /etc/profile

使環境變數修改生效

  1. 使用
    • 拉取框架

拉取 Laravel 5.5 及 Laravel 5.8 框架進行測試

[root ~]# cd /data/wwwroot
[root wwwroot]# composer create-project laravel/laravel laravel55 --prefer-dist "5.5.*"

執行成功後會在 wwwroot 目錄下生成 laravel55 檔案,進入該檔案,執行命令檢視版本

[root wwwroot]# cd laravel55/
[root laravel55]# php artisan --version

效果如下
CentOS 下多版本 PHP 的安裝與配置

  • 配置虛擬主機

進入 nginx 配置目錄,我的在 /etc/nginx/conf.d/ ,建立 laravel55.conf檔案,內容大致為

server
{
     listen 80;
     server_name my.laravel55.cn;
     index index.html index.htm index.php default.html default.htm default.php;
     root /data/wwwroot/laravel55/public;
     location ~ [^/]\.php(/|$) {
         fastcgi_pass 127.0.0.1:9001;
         fastcgi_index index.php;
         include fastcgi.conf;
     }
     location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|mp4|ico)$ {
         expires 30d;
         access_log off;
     }
     location ~ .*\.(js|css)?$ {
         expires 7d;
         access_log off;
     }
     location ~ /\.ht {
         deny all;
     }
     location / {
         try_files $uri $uri/ /index.php?$query_string;
     }
 }

此處注意 ,fastcgi_pass 的配置要和剛剛安裝的 PHP 的 php-fpmlisten 配置一致,並且確保對應版本的 php-fpm 已啟動,否則訪問專案可能會出現 502 Bad Gateway 錯誤。此處 PHP 版本較多,容易出現這個問題

  • 配置本地 hosts 檔案

編輯本地 hosts 檔案,加入本地域名對映 127.0.0.1 my.laravel55.cn ,儲存退出

  • 重啟 nginx 服務

    [root ~]# nginx -s reload
    開啟瀏覽器,訪問剛配置的域名,效果如下
    CentOS 下多版本 PHP 的安裝與配置
    成功!

(Laravel 5.8 的配置訪問同上)

  1. 參考博文

  2. 致謝

感謝上述博文作者鋪的路,理解能力有限,本文如有錯誤或不足之處歡迎批評指正,多謝!

完~

相關文章