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

在Nginx上部署ThinkPHP,解決Pathinfo問題

編輯:關於PHP編程

在Nginx上部署ThinkPHP,解決Pathinfo問題


在Nginx上部署ThinkPHP,解決Pathinfo問題

 


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

在sublime下,一般會為UTF-8文件添加BOM頭,這個BOM頭在window下通常是看不見的,可以通過其他的編輯器查看到,Linux下也可以直接看到,通常顯示出來是一個亂碼字符,把這個字符刪除即可,或者簡單一點,直接在第一行回車,再刪除就可以了。到這裡,後台基本可以訪問了。

有幾個小問題需要說明一下(參考:http://www.lai18.com/content/368727.html)

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;   //訪問首頁

     }

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

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

$path=./Public/uploads/;    

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

4.在配置nginx和php方面,我使用了fastCGI的方式,將如下代碼保存為cmd文件,直接點擊運行就可以了

F:phpphp-cgi.exe -b 127.0.0.1:9000 -c F:phpphp.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框架ThinkPHP學習》系列技術文章整理收藏

1Thinkphp實現MySQL讀寫分離操作示例

2使用ThinkPHP+Uploadify實現圖片上傳功能

3ThinkPHP調用百度翻譯類實現在線翻譯

4Thinkphp使用mongodb數據庫實現多條件查詢方法

5ThinkPHP實現多數據庫連接的解決方法

6改寫ThinkPHP的U方法使其路由下分頁正常

7ThinkPHP實現將SESSION存入MYSQL的方法

8ThinkPHP連接數據庫及主從數據庫的設置教程

9ThinkPHP中pathinfo的訪問模式、路徑訪問模式及URL重寫總結

10ThinkPHP基於PHPExcel導入Excel文件的方法

11thinkphp獲取欄目和文章當前位置的方法

12ThinkPHP結合AjaxFileUploader實現無刷新文件上傳的方法

13ThinkPHP無限級分類原理實現留言與回復功能實例

14ThinkPHP在新浪SAE平台的部署實例

15ThinkPHP控制器間實現相互調用的方法

16ThinkPHP實現帶驗證碼的文件上傳功能實例

17ThinkPHP寫數組插入與獲取最新插入數據ID實例

18ThinkPHP水印功能實現修復PNG透明水印並增加JPEG圖片質量可調整

19thinkphp使用literal防止模板標簽被解析的方法

20ThinkPHP中RBAC類的四種用法分析

21ThinkPHP中__initialize()和類的構造函數__construct()用法分析

22ThinkPHP自動完成中使用函數與回調方法實例

23ThinkPHP實現動態包含文件的方法

24thinkphp實現發送郵件密碼找回功能實例

25ThinkPHP實現支付寶接口功能實例

26Thinkphp搜索時首頁分頁和搜索頁保持條件分頁的方法

27ThinkPHP入口文件設置及相關注意事項分析

28ThinkPHP模版引擎之變量輸出詳解

29thinkphp實現上一篇與下一篇的方法

30ThinkPHP中url隱藏入口文件後接收alipay傳值的方法

31ThinkPHP打開驗證碼頁面顯示亂碼的解決方法

32ThinkPHP中使用ajax接收json數據的方法

33ThinkPHP內置jsonRPC的缺陷分析

34thinkphp3.0輸出重復兩次的解決方法

35thinkPHP實現表單自動驗證

36Thinkphp中的curd應用實用要點

37淺談thinkphp的實例化模型

38ThinkPHP 404頁面的設置方法

39THINKPHP內容分頁代碼分享

40在Nginx上部署ThinkPHP項目教程

41淺析THINKPHP的addAll支持的最大數據量

42ThinkPHP提示錯誤Fatal error: Allowed memory size的解決方法

43ThinkPHP3.2.2的插件控制器功能

44ThinkPHP3.2.3數據庫設置新特性

45ThinkPHP 3.2 版本升級了哪些內容

46thinkPHP學習筆記之安裝配置篇

47Thinkphp調用Image類生成縮略圖的方法

48解決ThinkPHP關閉調試模式時報錯的問題匯總

49ThinkPHP文件緩存類代碼分享

 

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