2011-11-26 50 views
0

我在編碼方面存在一些問題。我已經制作了一個文件恢復PHP腳本,允許用戶在文件名旁邊放置一個複選框 - 然後當他們點擊底部的「恢復」按鈕時,它將從備份恢復相關文件。HTML表單文章 - 使用具有長名稱屬性的複選框

不幸的是,似乎有一個問題。文件的完整路徑和名稱位於複選框的「名稱」屬性中 - 這樣,它就會作爲需要恢復的位置和文件傳遞給下一個腳本。

舉個例子:

<input type="checkbox" name="/backups/Sunday/111111111111-com/www/components/com_virtuemart/" /> 

參見 「name」 屬性是多長時間?在許多情況下,恢復工作 - 但一旦名稱屬性變長,它不再工作。在上述屬性中,「名稱」字段長度爲63個字符。

現在,如果另外一個是煉

<input type="checkbox" name="/backups/Sunday/111111111111-com/www/components/com_virtuemart/js/" /> 

上述 「name」 屬性是長67個字符。這是行不通的。

在POST數據發佈到的腳本上,我做了一個var_dump($ _ POST);看看輸出是什麼。在「name」屬性長度爲63個字符的第一種情況下,var_dump顯示它。但在屬性長度爲67個字符的第二種情況下,它不顯示它 - 因此該文件未被恢復。

有沒有辦法解決這個假設的屬性大小限制?我在網上查看,看到幾個帖子,其中有人說,「名稱」屬性的長度沒有限制 - 但顯然有一個。

謝謝!

+0

好的 - 我想我已經在這裏發現了我自己的問題。 PHP與suhosin模塊一起安裝。我禁用suhosin模塊,它似乎工作正常。 現在我只需要弄清楚在模塊中更改哪個設置以允許長名稱。 –

+0

問題已解決。原因是PHP中的Suhosin模塊。我不得不修改默認64的suhosin.post.max_name_length,也必須修改默認64的suhosin.request.max_varname_length。只修改其中的一個並不會導致問題;都必須從默認更改。 –

+0

suhosin.post.max_name_length是你想要我相信的東西。你也會想要改變這個配置變量的相應的「請求」版本 – Lee

回答

0

它的suhosin php硬化劑這是毫無疑問的。你可以編輯suhosin config目錄,或者你需要採取不同的方法。

也許最簡單的方法是不用重新編碼腳本塊來使用別名或存儲一個key => value數組就可以持久地將輸入名稱設置爲「files []」,並將路徑放到文件中複選框的值。那麼你可以做

foreach($_POST['files'] as $f) { 
//$f is the file path 
} 

但是我自己我不喜歡做這樣的事情。我試着在某處存儲一個key => value數組。如果您不想使用數據庫,只需將一個php數組序列化爲一個文件,那麼只需爲每個文件使用整數數組鍵即可。然後在處理腳本中,您可以簡單地從已存儲的數組中獲取已發佈整數索引處的文件