程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> 在Nginx上配置ThinkPHP項目,nginxthinkphp項目

在Nginx上配置ThinkPHP項目,nginxthinkphp項目

編輯:關於PHP編程

在Nginx上配置ThinkPHP項目,nginxthinkphp項目


      前段時間用Apache配合TP開發了一個小型網站,也算是我使用TP的第一次實戰。我習慣使用pathinfo模式,本地運行一切正常,然而部署到服務器上時,由於對方使用的是Nginx,默認是不支持ThinkPHP的pathinfo模式,所以導致路徑錯誤,出現了頁面循環跳轉的問題,於是就把nginx下載下來在本地親自測試。

      其實,要解決nginx不支持pathinfo的問題,有兩個解決思路,一是不使用pathinfo模式,二是修改nginx的配置文件,使它支持pathinfo。為了使問題簡單化,我選擇了第一種方式,因為就第二種方式,我查了很多資料,發現大家的方法不盡相同,有的還差別很大,容易造成誤導,所以我選擇從簡出發,選擇普通模式,雖然有一定的風險。當把index.php對應的前台代碼修改完畢之後,發現前台基本正常,可是後台仍然出現重定向的問題。折騰了半天之後,我才想到看一下日志文件,原來是編輯器的問題,看來日志文件真的很重要,以前一直不重視。在config.php文件的第一行出現了輸出,

1.在登錄的時候,我是通過外部js文件發送Ajax請求進行驗證的,在js與ThinkPHP模塊函數通信遇到了點問題,一直不知道正確的路徑該怎麼寫,也沒有查到相關資料,只能各種試,好在找到了解決辦法,通過直接帶上入口文件名的方式,代碼如下

 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     }

    當然,此為普通模式下的訪問方式,如果是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";   //跳轉首頁,訪問其他模塊的方法

      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");

      3.在刪除文件時會遇到路徑問題,因為項目中使用的較多的是相對路徑,即相對入口文件而言,但是刪除文件則需要使用絕對路徑,我並沒有找到合適的解決方法,只好用了比較保守的方式,代碼如下

1 $path="./Public/uploads/";    
2 $path=str_replace("\\","/",realpath($path)."/");  //獲取絕對路徑,並轉換分隔符

       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             #如果地址與引號內的正則表達式匹配
13             if ($fastcgi_script_name ~ "^(.+?\.php)(/.+)$") {
14                     #將文件地址賦值給變量 $real_script_name
15                     set $real_script_name $1;
16                     #將文件地址後的參數賦值給變量 $path_info
17                     set $path_info $2;
18             }
19             #配置fastcgi的一些參數
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         }

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved