《PHP實例:在Nginx上部署ThinkPHP項目教程》要點:
本文介紹了PHP實例:在Nginx上部署ThinkPHP項目教程,希望對您有用。如果有疑問,可以聯系我們。
PHP實例前段時間用Apache配合TP開發了一個小型網站,也算是我使用TP的第一次實戰.我習慣使用pathinfo模式,當地運行一切正常,然而部署到服務器上時,由于對方使用的是Nginx,默認是不支持ThinkPHP的pathinfo模式,所以導致路徑錯誤,出現了頁面循環跳轉的問題,于是就把nginx下載下來在當地親自測試.
PHP實例????? 其實,要解決nginx不支持pathinfo的問題,有兩個解決思路,一是不使用pathinfo模式,二是修改nginx的配置文件,使它支持pathinfo.為了使問題簡單化,我選擇了第一種方式,因為就第二種方式,我查了很多資料,發現大家的辦法不盡相同,有的還差別很大,容易造成誤導,所以我選擇從簡出發,選擇普通模式,雖然有一定的風險.當把index.php對應的前臺代碼修改完畢之后,發現前臺基本正常,可是后臺仍然出現重定向的問題.折騰了半天之后,我才想到看一下日志文件,原來是編輯器的問題,看來日志文件真的很重要,以前一直不重視.在config.php文件的第一行出現了輸出,
PHP實例![PHP實例:在Nginx上部署ThinkPHP項目教程]()
PHP實例????? 在sublime下,一般會為UTF-8文件添加BOM頭,這個BOM頭在window下通常是看不見的,可以通過其他的編輯器查看到,Linux下也可以直接看到,通常顯示出來是一個亂碼字符,把這個字符刪除即可,或者簡單一點,直接在第一行回車,再刪除就可以了.到這里,后臺基本可以拜訪了.
PHP實例????? 有幾個小問題必要說明一下.
PHP實例????? 1.在登錄的時候,我是通過外部js文件發送Ajax哀求進行驗證的,在js與ThinkPHP模塊函數通信遇到了點問題,一直不知道正確的路徑該怎么寫,也沒有查到相關資料,只能各種試,好在找到了解決辦法,通過直接帶上入口文件名的方式,代碼如下
代碼如下:
?var url="system.php?m=Login&a=doLog";
?$.post(url,{"staffname":$staffname,"staffpwd":$staffpwd,"verifycode":$verifycode},function(data){
???? if(data=="codeerr"){
?????????? alert("驗證碼錯誤!");
???? }else if(data=="authempty"){
?????????? alert("請輸入用戶名或暗碼!")
???? }else if(data=="autherr"){
?????????? alert("用戶名或暗碼錯誤!");
???? }else if(data=="success"){
?????????? alert("登錄成功!");
??????????? location.href="system.php?m=Index&a=index";?? //訪問首頁
???? }
PHP實例??? 當然,此為普通模式下的訪問方式,如果是pathinfo的話,只需要把紅色部分如下修改即可
代碼如下:
?var url="doLog";
?$.post(url,{"staffname":$staffname,"staffpwd":$staffpwd,"verifycode":$verifycode},function(data){
?????? if(data=="codeerr"){
?????????????? alert("驗證碼錯誤!");
?????? }else if(data=="authempty"){
?????????????? alert("請輸入用戶名或暗碼!")
?????? }else if(data=="autherr"){
?????????????? alert("用戶名或暗碼錯誤!");
?????? }else if(data=="success"){
?????????????? alert("登錄成功!");
?????????????? location.href="../Index/index";?? //跳轉首頁,訪問其他模塊的方法
PHP實例????? 2.下載文件的時候,總是莫名多出許多html的東西,原因是緩沖區沒有清空,可以通過以下代碼進行修改,不過這種方式實際上是下載的仍然是html格式的文件,只不過改了一下后綴名為xls而已,因而用excel打開的時候會提示格式問題,忽略即可.同時需要注意使用 icov()函數轉換編碼,因為xls默認編碼格式并非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");
PHP實例????? 3.在刪除文件時會遇到路徑問題,因為項目中使用的較多的是相對路徑,即相對入口文件而言,但是刪除文件則需要使用絕對路徑,我并沒有找到合適的解決辦法,只好用了比較保守的方式,代碼如下
代碼如下:
?$path="./Public/uploads/";???
?$path=str_replace("\\","/",realpath($path)."/");? //獲取絕對路徑,并轉換分隔符
PHP實例?????? 4.在配置nginx和php方面,我使用了fastCGI的方式,將如下代碼保留為cmd文件,直接點擊運行就可以了
PHP實例"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,用于寄存真實地址
???????????? set $real_script_name $fastcgi_script_name;
???????????? #如果地址與引號內的正則表達式匹配
???????????? if ($fastcgi_script_name ~ "^(.+?\.php)(/.+)$") {
???????????????????? #將文件地址賦值給變量 $real_script_name
???????????????????? set $real_script_name $1;
???????????????????? #將文件地址后的參數賦值給變量 $path_info
???????????????????? set $path_info $2;
???????????? }
???????????? #配置fastcgi的一些參數
???????????? fastcgi_param SCRIPT_FILENAME $document_root$real_script_name;
???????????? fastcgi_param SCRIPT_NAME $real_script_name;
???????????? fastcgi_param PATH_INFO $path_info;
???????? }
歡迎參與《PHP實例:在Nginx上部署ThinkPHP項目教程》討論,分享您的想法,維易PHP學院為您提供專業教程。
轉載請注明本頁網址:
http://www.snjht.com/jiaocheng/12485.html