Formular geht nur manchmal mit action='?data=99'

Hallo,

ich habe ein HTML-Formular für ein Dateiupload. Das Formular ruft sich selbst auf, in der Datei ist PHP-Programmierung vorhanden, die die Daten auswertet.

Das Formular sieht vereinfacht so aus:

Da ich der Datei index.php noch Informationen per GET-Variablen Informationen mitgeben muss (individuelles CMS mit Übergabe der Seiten-Id), ändere ich nun den Formularkopf zu

Während die erste Version die Datei problemlos bis zur maximalen Dateiübertragungsgröße des Webservers hochlädt, ist bei der zweiten Version mit GET-Variablen bei ca 500KByte Schluss.

Der Internet-Explorer zeigt bei größeren Dateien die Meldung: „Seite nicht gefunden“, der Mozilla-Firefox zeigt das Fenster zum Download an: „Sie möchten folgende Datei herunterladen: index.php. Wie soll Firefox mit dieser Datei verfahren? [Öffnen mit…] [Auf Diskette/Festplatte speichern]“.

Der Fehler erscheint während des Uploads nach wenigen Sekunden, also während des HTML-File-Uploads und lange bevor ein PHP-Skript in der index.php ausgeführt wird. Ich denke daher, dass es kein PHP-Problem ist.

Das Upload funktioniert auch bestens, solange ich in der Formular-Aktion keine GET-Übergabe einsetze. Sobald ich ein ‚?data=99‘ anfüge, funktionieren nur noch Dateien unter ca. 500KByte.

Wer weiß was?
Wolfgang

Hallo,

Während die erste Version die Datei problemlos bis zur
maximalen Dateiübertragungsgröße des Webservers hochlädt, ist
bei der zweiten Version mit GET-Variablen bei ca 500KByte
Schluss.

Und was sagt die error.log deines Webservers? Welcher HTTP-Header kommt zurück?

Der Internet-Explorer zeigt bei größeren Dateien die Meldung:
„Seite nicht gefunden“, der Mozilla-Firefox zeigt das Fenster
zum Download an: „Sie möchten folgende Datei herunterladen:
index.php. Wie soll Firefox mit dieser Datei verfahren?
[Öffnen mit…] [Auf Diskette/Festplatte speichern]“.

Und wenn du dir diese Datei mal anschaust, was steht dann darin?

Grüße,
Moritz

Hallo Wolfgang,
schon mal versucht die seiten ID nicht als GET variable anzuhängen sondern als post. mitzuschicken ungefähr so:

gruss chris

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Moritz,

Während die erste Version die Datei problemlos bis zur
maximalen Dateiübertragungsgröße des Webservers hochlädt, ist
bei der zweiten Version mit GET-Variablen bei ca 500KByte
Schluss.

Und was sagt die error.log deines Webservers? Welcher
HTTP-Header kommt zurück?

Ahja - die error_log sagt:
Allowed memory size of 8388608 bytes exhausted (tried to allocate 142 bytes)
ohne Angabe von Datum oder Uhrzeit.
Die hochzuladende Bilddatei ist definitiv nicht so groß. Irgendwozu braucht der Server mit GET-Aufruf offenbar mehr Resourcen als ohne.

Der Internet-Explorer zeigt bei größeren Dateien die Meldung:
„Seite nicht gefunden“, der Mozilla-Firefox zeigt das Fenster
zum Download an: „Sie möchten folgende Datei herunterladen:
index.php. Wie soll Firefox mit dieser Datei verfahren?
[Öffnen mit…] [Auf Diskette/Festplatte speichern]“.

Und wenn du dir diese Datei mal anschaust, was steht dann
darin?

Die Datei wird mit 0 Bytes gespeichert, also eine leere Datei.

Gruß
Wolfgang

Hi Christian,

ja, ich hab mit alternativen Szenarien experimentiert und auch an dieses gedacht. Allerdings funktioniert das gesamte CMS mit Übergabe der Artikel-ID per GET. Für Deine Lösung müsste ich da irgendwie zwischenfummeln, um der index.php zu sagen: „Pass auf, jetzt bekommst Du die ID ausnahmsweise nicht per GET, sondern per POST“.
Find ich nicht so schön.

Aber funktionieren tät das wahrscheinlich.

Gruß
Wolfgang

schon mal versucht die seiten ID nicht als GET variable
anzuhängen sondern als post. mitzuschicken ungefähr so:

gruss chris

ich habe ein HTML-Formular für ein Dateiupload. Das Formular
ruft sich selbst auf, in der Datei ist PHP-Programmierung
vorhanden, die die Daten auswertet.

Das Formular sieht vereinfacht so aus:

Da ich der Datei index.php noch Informationen per
GET-Variablen Informationen mitgeben muss (individuelles CMS
mit Übergabe der Seiten-Id), ändere ich nun den Formularkopf
zu

Während die erste Version die Datei problemlos bis zur
maximalen Dateiübertragungsgröße des Webservers hochlädt, ist
bei der zweiten Version mit GET-Variablen bei ca 500KByte
Schluss.

Der Internet-Explorer zeigt bei größeren Dateien die Meldung:
„Seite nicht gefunden“, der Mozilla-Firefox zeigt das Fenster
zum Download an: „Sie möchten folgende Datei herunterladen:
index.php. Wie soll Firefox mit dieser Datei verfahren?
[Öffnen mit…] [Auf Diskette/Festplatte speichern]“.

Der Fehler erscheint während des Uploads nach wenigen
Sekunden, also während des HTML-File-Uploads und lange bevor
ein PHP-Skript in der index.php ausgeführt wird. Ich denke
daher, dass es kein PHP-Problem ist.

Das Upload funktioniert auch bestens, solange ich in der
Formular-Aktion keine GET-Übergabe einsetze. Sobald ich ein
‚?data=99‘ anfüge, funktionieren nur noch Dateien unter ca.
500KByte.

Hi Christian,

ja, ich hab mit alternativen Szenarien experimentiert und auch
an dieses gedacht. Allerdings funktioniert das gesamte CMS mit
Übergabe der Artikel-ID per GET. Für Deine Lösung müsste ich
da irgendwie zwischenfummeln, um der index.php zu sagen: „Pass
auf, jetzt bekommst Du die ID ausnahmsweise nicht per GET,
sondern per POST“.
Find ich nicht so schön.

Aber funktionieren tät das wahrscheinlich.

wie währe es mit folgender lösung in deiner index.php:

if(isset($_POST[‚id‘]) and empty($_GET[‚id‘]){
$_GET[‚id‘]=$_POST[‚id‘];
}

mit diesem simplen 2 zweizeiler würder er die id aus dem post nehmen und sie in’s get array übertragen falls sie nicht gesetzt ist. damit sollten alle sonstigen aufrufen auch gehen.

ich persönlich nutze in meiner programmierung meisten
$_REQUEST , weil das post & GET variablen enthält es sei denn es soll explizit nur einer der beiden typen erlaubt sein.

gruss chris.

1 Like

ja, ich hab mit alternativen Szenarien experimentiert und auch
an dieses gedacht. Allerdings funktioniert das gesamte CMS mit
Übergabe der Artikel-ID per GET. Für Deine Lösung müsste ich
da irgendwie zwischenfummeln(…)

wie währe es mit folgender lösung in deiner index.php:

if(isset($_POST[‚id‘]) and empty($_GET[‚id‘]){
$_GET[‚id‘]=$_POST[‚id‘];
}

mit diesem simplen 2 zweizeiler würder er die id aus dem post
nehmen und sie in’s get array übertragen falls sie nicht
gesetzt ist. damit sollten alle sonstigen aufrufen auch gehen.

Ja Christian, du hast Recht. Das ist nicht viel Arbeit. Aber irgendwie ärgert es mich doch, dass ich nicht hinter den anderen Fehler komme.

Aber danke auf jeden Fall! Ich werde das in ähnlicher Form jetzt auch so realisieren.

Viele Grüße
Wolfgang

Lösung
Hallo,

das Formular brach nun doch wg einer PHP-Funktion (ImageCreateFromJPEG) ab, mit deren Hilfe das hochgeladene Foto verkleinern werden sollte. Die Pixelzahl des Bildes (und nicht seine Upload-Größe) führte zu einem Überlauf des verfügbaren Arbeitsspeichers für PHP-Skripte.

Das Skript mit der ImageCreateFromJPEG-Funktion wurde aufgerufen, sobald die entsprechende Seiten-ID übertragen wurde.

Gruß
Wolfgang