執行個體解決nginx不支援TP中pathinfo的問題

來源:互聯網
上載者:User
nginx是不支援TP中pathinfo的,如何解決呢?本文主要介紹如何解決當Nginx不支援pathinfo問題時該如何解決。希望對大家有所協助。

下面小編通過文字加代碼的方式給大家詳解下,具體內容如下:

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

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

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("<a target="_blank" href="file:///" style="color:rgb(51,119,170); text-decoration:none">\\","/",realpath($path)."/</a>");  //擷取絕對路徑,並轉換分隔字元

4.在配置nginx和php方面,我使用了fastCGI的方式,將如下代碼儲存為cmd檔案,直接點擊運行就可以了
"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;     #如果地址與引號內的Regex匹配     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 pathinfo()函數擷取檔案路徑資訊用法總結

使用php pathinfo(), parse_url(), basename()函數解析URL執行個體講解

[PHP] 命令列執行整合pathinfo類比定時任務

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.