在Nginx上配置ThinkPHP项目
? ? ? 前段時間用Apache配合TP開發(fā)了一個小型網(wǎng)站,也算是我使用TP的第一次實戰(zhàn)。我習(xí)慣使用pathinfo模式,本地運行一切正常,然而部署到服務(wù)器上時,由于對方使用的是Nginx,默認(rèn)是不支持ThinkPHP的pathinfo模式,所以導(dǎo)致路徑錯誤,出現(xiàn)了頁面循環(huán)跳轉(zhuǎn)的問題,于是就把nginx下載下來在本地親自測試。
? ? ? 其實,要解決nginx不支持pathinfo的問題,有兩個解決思路,一是不使用pathinfo模式,二是修改nginx的配置文件,使它支持pathinfo。為了使問題簡單化,我選擇了第一種方式,因為就第二種方式,我查了很多資料,發(fā)現(xiàn)大家的方法不盡相同,有的還差別很大,容易造成誤導(dǎo),所以我選擇從簡出發(fā),選擇普通模式,雖然有一定的風(fēng)險。當(dāng)把index.php對應(yīng)的前臺代碼修改完畢之后,發(fā)現(xiàn)前臺基本正常,可是后臺仍然出現(xiàn)重定向的問題。折騰了半天之后,我才想到看一下日志文件,原來是編輯器的問題,看來日志文件真的很重要,以前一直不重視。在config.php文件的第一行出現(xiàn)了輸出,
? ? ? 在sublime下,一般會為UTF-8文件添加BOM頭,這個BOM頭在window下通常是看不見的,可以通過其他的編輯器查看到,Linux下也可以直接看到,通常顯示出來是一個亂碼字符,把這個字符刪除即可,或者簡單一點,直接在第一行回車,再刪除就可以了。到這里,后臺基本可以訪問了。
? ? ? 有幾個小問題需要說明一下。
? ? ? 1.在登錄的時候,我是通過外部js文件發(fā)送Ajax請求進行驗證的,在js與ThinkPHP模塊函數(shù)通信遇到了點問題,一直不知道正確的路徑該怎么寫,也沒有查到相關(guān)資料,只能各種試,好在找到了解決辦法,通過直接帶上入口文件名的方式,代碼如下
1 var url="system.php?m=Login&a=doLog"; 2 $.post(url,{"staffname":$staffname,"staffpwd":$staffpwd,"verifycode":$verifycode},function(data){ 3 if(data=="codeerr"){ 4 alert("驗證碼錯誤!"); 5 }else if(data=="authempty"){ 6 alert("請輸入用戶名或密碼!") 7 }else if(data=="autherr"){ 8 alert("用戶名或密碼錯誤!"); 9 }else if(data=="success"){ 10 alert("登錄成功!"); 11 location.href="system.php?m=Index&a=index"; //訪問首頁 12 }? ? 當(dāng)然,此為普通模式下的訪問方式,如果是pathinfo的話,只需要把紅色部分如下修改即可
1 var url="doLog"; 2 $.post(url,{"staffname":$staffname,"staffpwd":$staffpwd,"verifycode":$verifycode},function(data){ 3 if(data=="codeerr"){ 4 alert("驗證碼錯誤!"); 5 }else if(data=="authempty"){ 6 alert("請輸入用戶名或密碼!") 7 }else if(data=="autherr"){ 8 alert("用戶名或密碼錯誤!"); 9 }else if(data=="success"){ 10 alert("登錄成功!"); 11 location.href="../Index/index"; //跳轉(zhuǎn)首頁,訪問其他模塊的方法? ? ? 2.下載文件的時候,總是莫名多出許多html的東西,原因是緩沖區(qū)沒有清空,可以通過以下代碼進行修改,不過這種方式實際上是下載的仍然是html格式的文件,只不過改了一下后綴名為xls而已,因而用excel打開的時候會提示格式問題,忽略即可。同時需要注意使用 icov()函數(shù)轉(zhuǎn)換編碼,因為xls默認(rèn)編碼格式并非utf-8.
ob_start(); ob_end_clean(); Header( "Content-type: application/octet-stream"); Header( "Accept-Ranges: bytes "); Header( "Content-type:application/vnd.ms-excel;charset=gb2312"); Header( "Content-Disposition:attachment;filename={$filename}.xls");? ? ? 3.在刪除文件時會遇到路徑問題,因為項目中使用的較多的是相對路徑,即相對入口文件而言,但是刪除文件則需要使用絕對路徑,我并沒有找到合適的解決方法,只好用了比較保守的方式,代碼如下
1 $path="./Public/uploads/"; 2 $path=str_replace("\\","/",realpath($path)."/"); //獲取絕對路徑,并轉(zhuǎn)換分隔符? ? ? ?4.在配置nginx和php方面,我使用了fastCGI的方式,將如下代碼保存為cmd文件,直接點擊運行就可以了
"F:\php\php-cgi.exe" -b 127.0.0.1:9000 -c "F:\php\php.ini" //后面是php文件的路徑? ? ? 然后在nginx的配置文件里加上幾句話
1 location ~ \.php/?.* { 2 root myapplications; 3 fastcgi_pass 127.0.0.1:9000; 4 fastcgi_index index.php; 5 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 6 include fastcgi_params; 7 8 #定義變量 $path_info ,用于存放pathinfo信息 9 set $path_info ""; 10 #定義變量 $real_script_name,用于存放真實地址 11 set $real_script_name $fastcgi_script_name; 12 #如果地址與引號內(nèi)的正則表達(dá)式匹配 13 if ($fastcgi_script_name ~ "^(.+?\.php)(/.+)$") { 14 #將文件地址賦值給變量 $real_script_name 15 set $real_script_name $1; 16 #將文件地址后的參數(shù)賦值給變量 $path_info 17 set $path_info $2; 18 } 19 #配置fastcgi的一些參數(shù) 20 fastcgi_param SCRIPT_FILENAME $document_root$real_script_name; 21 fastcgi_param SCRIPT_NAME $real_script_name; 22 fastcgi_param PATH_INFO $path_info; 23 }?
轉(zhuǎn)載于:https://www.cnblogs.com/NaLanZiYi-LinEr/p/4266448.html
總結(jié)
以上是生活随笔為你收集整理的在Nginx上配置ThinkPHP项目的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [SAP ABAP开发技术总结]ABAP
- 下一篇: thinkphp模版调用函数方法