2011-04-30 59 views
2

我正在經歷一個非常奇怪的行爲。說我有以下兩個<input type='image'>(與src屬性等於name屬性):

<input type='image' name='http://farm1.static.flickr.com/224/471627793_fbda6cecbe_s.jpg'> 
<input type='image' name='http://farm5.static.flickr.com/4053/45_c5a85162ef_s.jpg'> 

我的問題是:爲什麼第一輸入提交,第二個不?我正在使用CakePHP,如果我點擊第二張圖片,$this->params['form']是空的。但是當我點擊第一張圖片時,一切都正常:$this->params['form']包含正確的圖像名稱及其點擊位置的座標。

這是一個非常奇怪的行爲,我相信只有在$_POST限制其鍵長時纔會發生這種情況。

任何幫助,高度讚賞!謝謝!

+0

您是否安裝了Suhosin補丁? – 2011-04-30 20:42:15

+0

您是否嘗試過其他字段的其他組合。例如:1:只需使用一個字段與第二個鍵。 2:刪除第二個輸入字段並逐漸增加名稱的長度。 – 2011-04-30 20:42:47

+0

POST數據作爲key = value對在請求正文中發送。因此,密鑰或數值長度沒有固有的限制。 – Thilo 2011-04-30 20:47:46

回答

4

PHP本身不會限制字段名稱長度爲multipart/-urlencoded POST請求。

但是suhosin確實有http://www.hardened-php.net/suhosin/configuration.html#suhosin.post.max_name_length,默認值爲64。而你的第二個網址的長度確實是64個字符。

不太可能,但也可能是mod_security設置。然而,它會泄漏錯誤消息而不是截斷。

+0

我如何知道suhosin是否安裝?另外我應該在哪裏尋找mod_security設置?我用另一個隨機生成的字符串進行測試,它做同樣的事情。如果名稱超過62個字符(64個添加_x和_y),則該按鈕不會提交。 – linkyndy 2011-04-30 21:02:17

+0

好吧,我剛發現我有Suhosin補丁。有什麼方法可以覆蓋默認設置嗎?請注意,我正在付費託管。 – linkyndy 2011-04-30 21:06:59

+0

那麼如果您爲您的託管付款,您有權聯繫管理員並要求進行系統端更改。正常設置可以通過'.htaccess'中的'php_value'重寫。但suhosin似乎僅限於從中央'php.ini'中讀取它們。如果您的主機安裝了它,它們有可能正在運行suexec,並且您有一個自定義的每個帳戶php.ini,它們可以爲您更改。 – mario 2011-04-30 21:34:43

1

我不能肯定,它的相關的長度,根據w3.org:

ID和名稱標記必須以 字母開頭([A-ZA-Z]),並且可以是(「 - 」),下劃線 (「_」),冒號(「:」)和句點 (「。」)後面跟着 ,其數字爲 。

所以也許這個問題與名稱中的非法字符有關。

您是否在不同的瀏覽器中試過了?

+0

沒有。那麼name屬性的URL模式可能是錯誤的嗎?這很奇怪,因爲如果少於62個字符,按鈕會提交,不管它包含URL。 – linkyndy 2011-04-30 20:53:56

+0

我錯在認爲值屬性提交的圖像按鈕?這比使用「name」傳遞數據更好,假設它可行。 – contrebis 2011-05-01 01:34:07

+0

不,名稱屬性與用戶點擊按鈕的位置的座標一起提交。 – linkyndy 2011-05-01 09:50:51