PHP Sorgu dize sınırı

4 Cevap php

PHP 5.1.6 (CLI) sahip yüklü ve GET sorgu dizesi birden fazla 128 karakter olduğunda HTTP 406 Kabul edilmedi hatası ile başarısız olur. Ben bu nasıl düzeltebilirim herhangi önerileri çok fazla 128 karakter kullanabilirsiniz? POST bir seçenek değildir.

The error is being returned by the server so don't think it's browser issue. And the reason I think it's PHP and not Apache is because it works fine with an HTML file.

GET /test.php?phptestof129characterstring-NEW-WOVEN-FENCE-PANELS-GARDEN_W0QQitemZ200303392512QQihZ010QQcategoryZ139954QQtcZphotoQQcmdZViewItem
HTTP/1.1
Host: *****
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.5) Gecko/2008120122 Firefox/3.0.5
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-gb,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Cookie: agent_name=Tim

HTTP/1.1 406 Not Acceptable
Date: Tue, 03 Feb 2009 12:05:33 GMT
Server: Apache/2.2.3 (Red Hat)
X-Powered-By: PHP/5.1.6
Content-Length: 0
Connection: close
Content-Type: text/html


GET /test.html?phptestof129characterstring-NEW-WOVEN-FENCE-PANELS-GARDEN_W0QQitemZ200303392512QQihZ010QQcategoryZ139954QQtcZphotoQQcmdZViewItem
HTTP/1.1
Host: *****
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.5) Gecko/2008120122 Firefox/3.0.5
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-gb,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Cookie: agent_name=Tim

HTTP/1.1 200 OK
Date: Tue, 03 Feb 2009 12:18:19 GMT
Server: Apache/2.2.3 (Red Hat)
Last-Modified: Fri, 19 Dec 2008 15:01:17 GMT
ETag: "156960d-221-94be8940"
Accept-Ranges: bytes
Content-Length: 545
Connection: close
Content-Type: text/html

4 Cevap

Ben'den Yorumlamak için cevap sayesinde bulduk.

Although this generates 406 error: test.php?129+characters

This works fine: test.php?data=129+characters

Yani benim tahminim ilk etapta PHP ikinci örnek adı ve dinlenme değeri olarak atanır için sadece 4 karakter var ise $ _GET dizideki adıyla 129 karakter kullanmaya çalışıyor, bu yüzden dizi için 128 karakter sınırı var olmasıdır dizin adı.

Eğer mod_security sunucunuza etkin var mı? Onu yapmak bir şey gibi geliyor. Eğer öyleyse, size <VirtualHost> bloğu içinde veya v1.x için bir. Htaccess dosyası ile yerel olarak devre dışı bırakmak mümkün olabilir

<IfModule mod_security.c>
SecFilterEngine Off
SecFilterScanPOST Off
</IfModule>

Sürüm 2.x farklı yapılandırma sözdizimi vardır:

<IfModule mod_security2.c>
    SecRuleEngine Off
</IfModule>

Bu bir kaba kuvvet yaklaşımı biraz, okumak isteyebilirsiniz documentation Eğer belirli URI'larını geçmesine izin nasıl görmek için. Ayrıca bkz Handling False Positives and Creating Custom Rules

Bir iş çevresinde olarak, çerezler veri koymak için Javascript kullanarak deneyebilirsiniz. (Yanılmıyorsam eğer) çerezleri her GET isteği ile otomatik olarak gönderilir ve size veri alanı ekstra bir 2KB vermek olacaktır.

Bu every isteği ile bu verileri iletmek istemiyorsanız çok riskli olduğunu, bu yüzden genellikle ben buna karşı tavsiye ederim konuşma.

Uzun bir ihtimal, ama eklemeyi deneyin:

header('Content-Type: text/html');

Sunucu tarafı kodu. Bu işe yaramazsa, PHP dosyaları text / html MIME türünü yaymaz böylece belki hatalı olduğunu, Apache yapılandırmasını denetleyin. Bu işe yaramazsa, nasıl o kadar. Html Apache kurulumuyla ilgili dosyaları PHP olarak kabul edilir ve. Html için hedef komut dosyası yeniden adlandırmak?

BTW, gelen http://www.checkupdown.com/status/E406.html:

Bir istemci (örneğin, Web tarayıcısı veya CheckUpDown robot) bu Web sunucusuna geri kabul edecek verilerin Web sunucusu özellikleri gösterebilir. Bu aşağıdaki tip 'başlıklarını kabul' kullanılarak yapılır:

  • Kabul: müşteri tarafından kabul MIME türlerini. Örneğin, bir tarayıcı sadece nasıl işleyeceğini bilir veri türlerini (HTML dosyaları, GIF dosyaları vb) geri kabul edebilir.
  • Accept-Charset: müşteri tarafından kabul karakter setleri.
  • Accept-Encoding: istemci örn tarafından kabul veri kodlama Dosya o anlar biçimlendirir.
  • Accept-Language: müşteri tarafından kabul doğal diller (İngilizce, Almanca vs.)
  • Accept-aralıkları: istemci kaynağın bir kısmı, yani kaynağından bayt aralıkları kabul olsun.

Web sunucu dönmek istiyor veri istemci için kabul edilemez olduğunu algılarsa, 406 hata kodunu içeren bir başlık döndürür.