在Nginx上部署ThinkPHP項(xiàng)目教程
前段時(shí)間用Apache配合TP開(kāi)發(fā)了一個(gè)小型網(wǎng)站,也算是我使用TP的第一次實(shí)戰(zhàn)。我習(xí)慣使用pathinfo模式,本地運(yùn)行一切正常,然而部署到服務(wù)器上時(shí),由于對(duì)方使用的是Nginx,默認(rèn)是不支持ThinkPHP的pathinfo模式,所以導(dǎo)致路徑錯(cuò)誤,出現(xiàn)了頁(yè)面循環(huán)跳轉(zhuǎn)的問(wèn)題,于是就把nginx下載下來(lái)在本地親自測(cè)試。
其實(shí),要解決nginx不支持pathinfo的問(wèn)題,有兩個(gè)解決思路,一是不使用pathinfo模式,二是修改nginx的配置文件,使它支持pathinfo。為了使問(wèn)題簡(jiǎn)單化,我選擇了第一種方式,因?yàn)榫偷诙N方式,我查了很多資料,發(fā)現(xiàn)大家的方法不盡相同,有的還差別很大,容易造成誤導(dǎo),所以我選擇從簡(jiǎn)出發(fā),選擇普通模式,雖然有一定的風(fēng)險(xiǎn)。當(dāng)把index.php對(duì)應(yīng)的前臺(tái)代碼修改完畢之后,發(fā)現(xiàn)前臺(tái)基本正常,可是后臺(tái)仍然出現(xiàn)重定向的問(wèn)題。折騰了半天之后,我才想到看一下日志文件,原來(lái)是編輯器的問(wèn)題,看來(lái)日志文件真的很重要,以前一直不重視。在config.php文件的第一行出現(xiàn)了輸出,

在sublime下,一般會(huì)為UTF-8文件添加BOM頭,這個(gè)BOM頭在window下通常是看不見(jiàn)的,可以通過(guò)其他的編輯器查看到,Linux下也可以直接看到,通常顯示出來(lái)是一個(gè)亂碼字符,把這個(gè)字符刪除即可,或者簡(jiǎn)單一點(diǎn),直接在第一行回車,再刪除就可以了。到這里,后臺(tái)基本可以訪問(wèn)了。
有幾個(gè)小問(wèn)題需要說(shuō)明一下。
1.在登錄的時(shí)候,我是通過(guò)外部js文件發(fā)送Ajax請(qǐng)求進(jìn)行驗(yàn)證的,在js與ThinkPHP模塊函數(shù)通信遇到了點(diǎn)問(wèn)題,一直不知道正確的路徑該怎么寫,也沒(méi)有查到相關(guān)資料,只能各種試,好在找到了解決辦法,通過(guò)直接帶上入口文件名的方式,代碼如下
var url="system.php?m=Login&a=doLog";
$.post(url,{"staffname":$staffname,"staffpwd":$staffpwd,"verifycode":$verifycode},function(data){
if(data=="codeerr"){
alert("驗(yàn)證碼錯(cuò)誤!");
}else if(data=="authempty"){
alert("請(qǐng)輸入用戶名或密碼!")
}else if(data=="autherr"){
alert("用戶名或密碼錯(cuò)誤!");
}else if(data=="success"){
alert("登錄成功!");
location.href="system.php?m=Index&a=index"; //訪問(wèn)首頁(yè)
}
當(dāng)然,此為普通模式下的訪問(wèn)方式,如果是pathinfo的話,只需要把紅色部分如下修改即可
var url="doLog";
$.post(url,{"staffname":$staffname,"staffpwd":$staffpwd,"verifycode":$verifycode},function(data){
if(data=="codeerr"){
alert("驗(yàn)證碼錯(cuò)誤!");
}else if(data=="authempty"){
alert("請(qǐng)輸入用戶名或密碼!")
}else if(data=="autherr"){
alert("用戶名或密碼錯(cuò)誤!");
}else if(data=="success"){
alert("登錄成功!");
location.href="../Index/index"; //跳轉(zhuǎn)首頁(yè),訪問(wèn)其他模塊的方法
2.下載文件的時(shí)候,總是莫名多出許多html的東西,原因是緩沖區(qū)沒(méi)有清空,可以通過(guò)以下代碼進(jìn)行修改,不過(guò)這種方式實(shí)際上是下載的仍然是html格式的文件,只不過(guò)改了一下后綴名為xls而已,因而用excel打開(kāi)的時(shí)候會(huì)提示格式問(wèn)題,忽略即可。同時(shí)需要注意使用 icov()函數(shù)轉(zhuǎn)換編碼,因?yàn)閤ls默認(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.在刪除文件時(shí)會(huì)遇到路徑問(wèn)題,因?yàn)轫?xiàng)目中使用的較多的是相對(duì)路徑,即相對(duì)入口文件而言,但是刪除文件則需要使用絕對(duì)路徑,我并沒(méi)有找到合適的解決方法,只好用了比較保守的方式,代碼如下
$path="./Public/uploads/";
$path=str_replace("\\","/",realpath($path)."/"); //獲取絕對(duì)路徑,并轉(zhuǎn)換分隔符
4.在配置nginx和php方面,我使用了fastCGI的方式,將如下代碼保存為cmd文件,直接點(diǎn)擊運(yùn)行就可以了
"F:\php\php-cgi.exe" -b 127.0.0.1:9000 -c "F:\php\php.ini" //后面是php文件的路徑
然后在nginx的配置文件里加上幾句話
location ~ \.php/?.* {
root myapplications;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
#定義變量 $path_info ,用于存放pathinfo信息
set $path_info "";
#定義變量 $real_script_name,用于存放真實(shí)地址
set $real_script_name $fastcgi_script_name;
#如果地址與引號(hào)內(nèi)的正則表達(dá)式匹配
if ($fastcgi_script_name ~ "^(.+?\.php)(/.+)$") {
#將文件地址賦值給變量 $real_script_name
set $real_script_name $1;
#將文件地址后的參數(shù)賦值給變量 $path_info
set $path_info $2;
}
#配置fastcgi的一些參數(shù)
fastcgi_param SCRIPT_FILENAME $document_root$real_script_name;
fastcgi_param SCRIPT_NAME $real_script_name;
fastcgi_param PATH_INFO $path_info;
}
相關(guān)文章
在Laravel5.6中使用Swoole的協(xié)程數(shù)據(jù)庫(kù)查詢
這篇文章主要介紹了在Laravel5.6中使用Swoole的協(xié)程數(shù)據(jù)庫(kù)查詢,詳細(xì)的介紹了什么是Swoole,以及Laravel5.6中使用Swoole,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2018-06-06
Laravel 中創(chuàng)建 Zip 壓縮文件并提供下載的實(shí)現(xiàn)方法
這篇文章主要介紹了Laravel 中創(chuàng)建 Zip 壓縮文件并提供下載,本文通過(guò)兩個(gè)任務(wù),實(shí)例代碼相結(jié)合的形式給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-04-04
使用PHP Socket 編程模擬Http post和get請(qǐng)求
這篇文章主要介紹了使用PHP Socket 編程模擬Http post和get請(qǐng)求 ,需要的朋友可以參考下2014-11-11
PHP中使用register_shutdown_function函數(shù)截獲fatal error示例
這篇文章主要介紹了PHP中使用register_shutdown_function函數(shù)截獲fatal error示例,需要的朋友可以參考下2015-04-04
PHP YII框架開(kāi)發(fā)小技巧之模型(models)中rules自定義驗(yàn)證規(guī)則
yii的models中rules部分是一些表單的驗(yàn)證規(guī)則,對(duì)于表單驗(yàn)證有幫助,在相應(yīng)的視圖(views)里面添加了表單,在表單被提交之前程序都會(huì)自動(dòng)先來(lái)這里面的規(guī)則里驗(yàn)證,只有通過(guò)對(duì)其有效的限制規(guī)則后才能被提交,可以很有效地保證表單安全和信息的有效性2015-11-11

