2012-03-26 15 views
9

Haben Sie diesen Fehler auf eine große $_GET Abfrage in Größe ~ 9 000 Symbole (sie sind in ~ 10 Variablen unterteilt).Request-URI zu groß

Request-URI Too Large 

The requested URL's length exceeds the capacity limit for this server. 

Was ist eine Problemumgehung für dieses Problem?

+2

Warum haben Sie eine URL, die diese lang ist? –

+5

Versuchen Sie, Ihre URI-Größe zu verringern. Ich habe nie 200 Charaktere überschritten, und das war viel zu groß für mich. Sie brauchen nicht ** ÜBER 9000 !!!! ** Zeichen .... –

+2

"Was ist eine Problemumgehung für dieses Problem?" Kürzen Sie die URL –

Antwort

7

Es gibt keine Problemumgehung, wenn Sie alle diese Informationen mit GET übergeben möchten, ohne die Serverkonfiguration zu ändern.

Andere Lösungen:

  • Verwenden POST mit einem Formular (oder eine versteckte Form und fügen Sie Ihren Link Onclick-Ereignis, das es abschicken)
  • Verwendung Session. Wenn der Server die Verbindung generiert, speichern Sie sie in $ _SESSION mit einer eindeutigen ID (oder RID, sie kann md5 der vollständigen URI sein) und übergeben sie über GET.
  • Verwenden Datenbank oder Dateispeicher (mit dem gleichen Verfahren der Sitzung)
+0

Siehe auch: [Wie komprimiere/dekomprimiere ich eine lange Abfragezeichenfolge in PHP?] (Http://stackoverflow.com/questions/2996049/how-to-compress-decompress-a-long-query-string-in- php) – hakre

+0

Ich denke, dass auf diese Weise verschieben Sie das Problem in der Zukunft, wenn die URL auch mit Komprimierung zu groß sein wird. Es ist besser, die Logik zu ändern, wenn Sie zu viele Informationen über get übergeben müssen. (Meine 2 Cent) –

+0

Das ist eine verwandte Frage nur, wenn Sie die angenommene Antwort dort lesen, können Sie sogar sehen, dass dies * nicht * so viel in der Zukunft aber schon in der Vergangenheit ist. – hakre

1

Das ist für mich gearbeitet (es braucht Formdata-Unterstützung):

<script> 
    //Load form 
    var formData = new FormData(); 
    formData.append("param_name1", "param_content1"); 
    formData.append("param_name2", "param_content2"); 
    formData.append("param_nameN", "param_contentN"); 

    //Send form via AJAX 
    var xhr = new XMLHttpRequest(); 
    xhr.open("POST", YOUR_URL); 
    xhr.send(formData); 
</script>