☪ 背景
- 今天將線下好不容易寫完的
ThinkPHP
項目代碼搬到線上服務器,然後出現各種坑
① 首先出現的情況是,PHP 版本安裝太低導致無法解析,需要 >5.6 ② 當版本滿足後,經過一番配置又發現不支持 URL 重寫 (形如:"http://seasonpro.com/article/7.html" ) ③ 分析後發現,本測試用的是Apache服務,線上 CentOS7.1 系統選用的是 Nginx 服務環境
- 環境
> TP 框架: ThinkPHP5.1.2 版本 > PHP版本: php-5.6.27(>= 及以上) > 服務器 : Nginx > 線上系統: CentOS7.1 > 測試環境: phpStudy2016 Apache/Nginx
- 畢竟在這上面花費了太多時間,在此記錄一番,願道友們可做借鑑,最重要的是作爲自己備忘記錄咯.
☪ 解決方法
1. 環境配置上的注意點
① 首先,安裝的 PHP版本不能太低,否則不支持 ThinkPHP5.1 框架的要求 ② 其次, "3306,80,21,22" 等端口需求的開放 ③ 對於 "php.ini" , "httpd.conf" 等服務配置文件的修改後,一定要重啓服務
這裏需要注意一點,如果使用的是
阿里雲服務
,一定要在其安全組配置
中,添加需要的端口,不然僅僅是Linux
命令操作也是白費
2. 不同應用服務器的區別操作
- 鄙人覺得,線下測試使用
phpStudy
是挺方便的,可以方便的對開發環境進行切換測試(但是,貌似只適用windows
,不支持MacOS
) - 當然,更加建議:在線下測試不同環境成功後再進行線上配置,避免時間的浪費
此處操作,請參考官方文檔:URL訪問·ThinkPHP5.1完全開發文檔 ,個人梳理測試如下:
❉ apache
- 此處跟文檔介紹稍有一丟丟不同的是,我並未改動
ThinkPHP5.1
框架中public
目錄下的.htaccess
文件
測試發現無影響,其中的源碼如下:
<IfModule mod_rewrite.c> Options +FollowSymlinks -Multiviews RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php [L,E=PATH_INFO:$1] </IfModule>
❉❉ Nginx
- 請找到線上服務環境的
nginx.conf
配置文件,在對應的location/{}
中補充如下代碼:
if (!-e $request_filename){ rewrite ^/youdomain/(.*)$ /youdomain/index.php?s=/$1 last; }
- 因爲
ThinkPHP5.1
框架的設計需求,我們的入口路徑是在public
下,參考文檔時,注意是對應着 二級目錄
爲了本地環境測試的真實性,我都會習慣性對自己的項目進行虛擬域名的配置,可做參考:
☪ 附錄
- 以上操作,希望你也能順利完成
- 附錄文章1:centOS7 安裝配置 lnmp參考博客整理
- 附錄文章2:WDCP 初次見面/打個招呼
小插曲 【其實,這個項目真實的情況就是從零配置的】
首先 從昨天申請完阿里雲主機服務後,整個 CentOS7.1初始化系統一片白紙; 然後 我參考了之前整理的一篇博客(可見附錄),按照操作步驟 “ Nginx->MySQL->PHP7->整合php-fpm ” 一套安裝過程走下來 最後 卡在了URL重寫的配置上,因爲誤刪 nginx.conf 文件中的一丟丟內容,怎麼也無法還原了 一氣之下 我給初始化了系統,但是也覺得氣不過,不願意再這麼安裝一遍 這時 同事建議可以直接安裝 WDCP(一套通過WEB控制和管理服務器的 Linux 服務器管理系統以及虛擬主機管理系統) 個人百度看着介紹的確簡單,主要是可以隨意切換PHP版本 所以 我在系統上直接安裝了這個管理系統(簡單梳理安裝步驟明天我再寫篇備忘,可見附錄) 但是,又TM 但是 在提示選擇哪種服務環境時,我覺得要不試試 Apache 吧 大坑出現了 在管理系統頁面不管怎麼切換PHP版本,生效的都是 PHP5.5.38 拜託 根本不支持我的 ThinkPHP5.1 框架 各種百度,看社區討論 得到的解釋竟然是:這種模式下,不支持PHP版本的選擇,也不知道官方爲啥不來解決這個坑 今天一早 我重新安裝 WDCP,小心的選擇了Nginx 服務環境安裝選項 二十分鐘過後 一切安裝就緒,然後源代碼使用FTP工具上傳顯示服務器對應目錄,並按照本地 phpStudy 測試的解決步驟,順利完工 緊接着 發現了一個搞笑的問題 在默認的 ThinkPHP5.1 框架下的 index目錄下的訪問一切正常,只是有一個自己新建的模塊訪問時總是報錯 “找不到對應的控制器” 原來!原來! Linux對目錄、命名空間什麼的大小寫太過敏感,當然原來的代碼在本地 Windows 機器上是沒問題的 得 以後好生注意下吧,兩天時間搭了進去,真是對Linux又愛又恨!!!