- 話題背景
因專案需求,要使用新版本 Laravel 框架,當前 PHP 版本只能支援到 Laravel 5.1 ,使用 composer 拉取 Laravel 5.5 框架,配置好 nginx 後訪問本地域名,效果如下
再次使用 composer 拉取 Laravel 5.8 框架,報錯如下
當然,文件有提到 Laravel 5.5 版本 PHP >= 7.0.0 ,Laravel 5.8 版本 PHP >= 7.1.3
而當前環境 PHP 版本
於是考慮是不是該換個 PHP 版本了~
(困惑:為什麼5.5版本也沒跑起來呢?) - 本地環境
- 作業系統: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
- 安裝準備
檢視已經安裝的 PHP 及其位置
[root]# locate */php
這一步可能出現的錯誤
-bash: locate: command not found
解決辦法
[root]# yum install mlocate
[root]# updatedb
再次執行命令
[root]# locate */php
即可看到已安裝版本及位置
- 開始安裝
- 下載原始碼
由於已經存在兩個 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
可能需要等待一段時間,執行成功後效果如下
-
安裝
[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
檔案,可修改其中的user
和group
為 www ,如果安裝了其他版本 PHP ,可能要修改listen
埠號,防止衝突,這裡改為 127.0.0.1:9001 ,儲存退出 -
啟動 php-fpm
[root php-fpm.d]# cd /usr/local/php73/sbin/
[root sbin]# ./php-fpm
如果這一步沒有報錯,則安裝成功- 切換版本
檢視當前 PHP 版本
[root ~]# php -v
效果如下
切換到剛剛安裝的版本
[root ~]# export PATH=/usr/local/php73/bin:$PATH
再次檢視 PHP 版本
[root ~]# php -v
效果如下
- 修改環境變數
將剛安裝的 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
使環境變數修改生效
- 使用
- 拉取框架
拉取 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
效果如下
- 配置虛擬主機
進入 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-fpm
的 listen
配置一致,並且確保對應版本的 php-fpm
已啟動,否則訪問專案可能會出現 502 Bad Gateway
錯誤。此處 PHP 版本較多,容易出現這個問題
- 配置本地
hosts
檔案
編輯本地 hosts
檔案,加入本地域名對映 127.0.0.1 my.laravel55.cn
,儲存退出
-
重啟 nginx 服務
[root ~]# nginx -s reload
開啟瀏覽器,訪問剛配置的域名,效果如下
成功!
(Laravel 5.8 的配置訪問同上)
-
參考博文
-
致謝
感謝上述博文作者鋪的路,理解能力有限,本文如有錯誤或不足之處歡迎批評指正,多謝!
完~