2011-10-11 11 views
39

Uzyskuję dostęp do serwera PHP przy użyciu usługi REST: wszystkie dane są przekazywane w żądaniu GET jako parametry adresu URL. Jeden z parametrów pojawia się na serwerze w query_string, ale nie znajduje się w globalnym _GET. Ale skrócenie tego parametru (odcięcie wydaje się być około 512 znaków) pozwala mu przejść.Maksymalny rozmiar parametrów adresu URL w _GET

Zakładając, że prawidłowo zdiagnozowałem problem, czy istnieje sposób na zmianę tego maksymalnego rozmiaru? Nie znalazłem żadnych wyjaśnień w dokumentacji, nawet nie wspomniałem o tym limicie. Jest to na systemie Debian squeeze/Apache 2.2.16/PHP 5.3.3.

+0

Maksymalna długość żądania GET wynosi zwykle około 2k. –

+1

Dzięki, ale to, co muszę wiedzieć, to maksymalna długość pojedynczego parametru GET w PHP. – alexfernandez

Odpowiedz

65

Ok, wydaje się, że niektóre wersje PHP posiada ograniczenie długości params otrzymujemy:

Należy pamiętać, że konfiguracje PHP z plastra suhosin zainstalowany będzie miał limit domyślnej 512 znaków dla parametrów GET . Mimo złej praktyce większość przeglądarek (w tym IE) obsługuje adresy URL do około 2000 znaków, podczas gdy Apache ma domyślną 8000.

aby dodać wsparcie dla długich parametrów z suhosin, dodać suhosin.get.max_value_length = <limit> w php.ini

Źródło: http://www.php.net/manual/en/reserved.variables.get.php#101469

+1

Działa, dzięki! – alexfernandez

+1

oooch, zostałeś użądlony przez to na ważnych danych! Dzięki, to naprawiło mój problem. – artfulrobot

+0

Mogę cię przytulić. Kwas zapytania o wartości 800+ "krypta" zwracany z Sage Pay przy użyciu integracji Form po prostu nie został odebrany przez nasz program obsługi checkout_process, co doprowadziło do przedstawienia raczej niepomocnego komunikatu "Karta nie mogła być autoryzowana!". FYI Znalazłem, że dodanie '' php_value suhosin.get.max_value_length 2000'' do .htaccess nie zadziałało, musiałem dodać '' suhosin.get.max_value_length = 2000'' do sekcji '' [suhosin] '' php. ini (i zrestartuj httpd), aby zmiana zaczęła obowiązywać. Nagle mój długi parametr zapytania krypt jest odbierany, przetwarzany, a płatności kartą znów działają. – Neek

0

Zobacz What is the maximum length of a URL in different browsers?

Długość URL nie może być zmieniony w PHP. Połączone pytanie dotyczy limitu rozmiaru adresu URL, znajdziesz to, czego szukasz.

+0

Adres URL jest w porządku, a ciąg zapytania ma wszystko. Jest to tylko ten jeden parametr (dłuższy niż 512 znaków), który nie pojawia się w _GET. – alexfernandez

+0

@alexinblue Być może wartość tej zmiennej ma specjalne symbole. Czy używasz 'urlencode()' dla wartości? – Karolis

+0

@Geoffroy jak stwierdzono, używam REST: żądanie GET jest dość wygodne i nie jestem skłonny go zmienić. Powiązany artykuł mówi o praktycznym limicie około 2000 - 4000 znaków w IE8; starsze przeglądarki nie stanowią problemu. – alexfernandez

Powiązane problemy