2011-05-18 60 views
2

我在Ubuntu 11上安裝了nginx 1.0.2,使用運行FPM/FastCGI的php 5.3.5。在nginx上運行的CodeIgniter應用程序中,數組始終爲空

關於我的codeigniter applilcation我得到以下問題。 我有一個帶有用戶名和密碼字段的簡單登錄表單。當我提交表單時,$ _POST數組是空的。 $ this-> input-> post('username')和$ this-> input-> post('password')也是如此。

該應用程序在Apache上正常工作。我試圖在一個簡單的php文件上創建一個簡單的測試表單,$ _POST數據完美工作。如果需要,我可以提供配置文件。有任何想法嗎 ?

更新: 它終於奏效了。在我的虛擬主機配置中有一些重定向導致數據丟失。工作虛擬主機的配置可以在這裏找到:http://codeigniter.com/forums/viewthread/90231/#455528

+0

你有fastcgi_pass_request_body關閉;在配置中的任何地方?錯誤日誌中是否有關於未能爲請求正文打開臨時文件的內容? – kolbyjack 2011-05-19 00:49:39

+0

不,在任何config或vhost文件中都找不到fastcgi_pass_request_body。我沒有在日誌中看到這樣的「臨時文件」錯誤,但是我確實從表單的目標URL獲得了404錯誤標題。 /user/login /顯示錶單,同樣的控制器/方法也分析結果。但是,只有當表單被引用時,404纔在標題中。我想重定向規則會導致錯誤。我使用這個人的重定向規則http://bit.ly/kljKty 其餘的nginx配置只是默認的東西。 說實話我沒有深入到重定向規則來理解該配置中的每一行。 – VangelisB 2011-05-19 08:55:11

+0

你得到404嗎?你如何驗證字段是空的? 404聽起來更像是表單根本沒有得到處理。 – kolbyjack 2011-05-19 12:50:13

回答

0

檢查這些:

<form method="post"> 

您使用POST方法?

嘗試運行探查:

$this->output->enable_profiler(TRUE); 

看到任何POST輸出呢?

+0

當然我正在使用post方法。就像我上面所說的,這個應用在Apache上運行的很好。 分析器是一個不錯的想法,我沒有想到,但仍然給我「沒有POST數據存在」。 – VangelisB 2011-05-18 19:05:11

1

我想我現在知道這個問題。它返回404並處理腳本的事實告訴我,error_page是正在執行「重寫」以將請求發送到/index.php。非命名位置的error_page會將請求轉換爲GET,因此error_page 404 /index.php正在執行到/index.php的內部重定向,但它將剝離進程中的請求主體(並且缺少=表示狀態碼未被error_page目標覆蓋)。我不確定爲什麼所有這些ifs都沒有執行重定向(如果在nginx中處理真的很奇怪,所以最好避免它們),但是我認爲如果你爲錯誤頁面使用命名的位置,那將會保存請求體並填寫$ _POST。試着用替換當前的error_page指令:

location @redir { 
    rewrite^/index.php; 
} 
error_page 404 = @redir; 
+0

它工作了一下。我現在沒有得到404。然而$ _POST數組仍然是空的 – VangelisB 2011-05-22 13:34:25

0

我使用類似URI我自己的PHP框架改寫爲CI和Nginx的服務器上也有類似的問題,因爲我的表格有行動,如:行動=「管理/登入/後「,我不得不改變它們以.php action =」admin/login/post.php「結束,以便它們能夠工作,但是這需要你改變你的CI類的URI重寫以從URI中替換.php串。

0

我有一個類似的問題,我試過這裏提到的一切。這很簡單,當我想到它時,我沒有在表單中命名我的輸入變量。我錯過了名稱參數。

<input type="name" placeholder="Name" name="name"> 
相關問題