Zum Inhalt springen

Größere Daten per Post von PHP -> Apache -> PHP


Empfohlene Beiträge

Hallo,

ich bin nun schon ganz verzweifelt.

Versuche seit längerem Mehrerer MB an Daten per post zu senden.

Ich mache es folgendermaßen:

ein einfaches php Skript prepariert dummy-Daten

<?php

for($i=0;$i<1600000;$i++)

{

$b .= "1";

}

?>

<html>

<head>

<form action="export.php">

<input type="submit" method="post">

<input type="hidden" name="id" value="987654321">

<input type="hidden" name="data" value="<?=$b?>">

</form>

</head>

</html>

Die Daten sollen wie man sieht an export.php gesendet werden wo ich einfach mal die Daten per "var_dump($_REQUEST);" ausgebe. In diesem Fall klappt das auch noch aber wenn ich die Schleife z.B. bis 1700000 laufen lasse, dann klappts schon nicht mehr und ich krieg nur "array(0) { }" als Ausgabe. Also wird $_REQUEST wird nicht gesetzt und warscheinlich liegt das an Apache.

Aber ich krieg auch keine Felhermeldung..

Hab auch schon mit folgenden Werten gespielt

LimitRequestBody

LimitRequestFields

LimitRequestFieldsize

LimitRequestLine

leider ohne Erfolg.

Wäre echt nett wenn mir da jemand weiterhelfen könnte...

System: Linux

PHP: 5

Apache: 2.2.3

Danke

Link zu diesem Kommentar
Auf anderen Seiten teilen

@JesterDay

Hab ich gerade gemacht. Ist leider noch nichts daran verändert worden und "memory_limit" steht immer noch auf "8M"

@Enrico T.

Doch doch. Wenn du genau hinschaust steht es oben auch da. Wobei es wohl nicht ins input element gehört. Ich hab es nun ins form Element gepackt. Das machte leider keinen Unterschied

Link zu diesem Kommentar
Auf anderen Seiten teilen

Doch doch. Wenn du genau hinschaust steht es oben auch da. Wobei es wohl nicht ins input element gehört. Ich hab es nun ins form Element gepackt. Das machte leider keinen Unterschied

Das method-Attribut gehört ins form-Tag. Nicht in ein input.

Gib doch mal bei dir den Inhalt deines POST-Arrays aus:


print_r($_POST);
[/PHP]

(in $_REQUEST stehen die Daten aus GET, POST, SESSION und COOKIE drin)

Link zu diesem Kommentar
Auf anderen Seiten teilen

@JesterDay

Hab ich gerade gemacht. Ist leider noch nichts daran verändert worden und "memory_limit" steht immer noch auf "8M"

"memory_limit" ist etwas ganz anderes und besagt nur, wieviel Speicher das Skript zur Laufzeit maximal benutzen darf. Wenn es mehr nutzen will, wird das Skript abgebrochen und es steht eine Fehlermeldung in der error_log.

Sicher dass die bei dir auch gefüllt wird? Ich hatte das mal bei einem VirtualHost, da hab ich kein errorLog angegeben (sollte das Standardlog verwendet werden) und erst nachdem ich explizit da eins angegeben hatte, hab ich auch was darin gehabt.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Das method-Attribut gehört ins form-Tag. Nicht in ein input.

Ok. Bin leider nicht so html erfahren. Aber im input Element hat es auch das getan was es soll :)

Gib doch mal bei dir den Inhalt deines POST-Arrays aus:


print_r($_POST);
[/PHP]

(in $_REQUEST stehen die Daten aus GET, POST, SESSION und COOKIE drin)

Verhält sich nicht anders wie bereits beschrieben. Wenn ich den genannten Wert überschreite gibt er nur "Array ( )" aus. Aber wie du bereits gesagt hast stehen in $_REQUEST die Daten aus GET, POST, SESSION und COOKIE drinnen...

Link zu diesem Kommentar
Auf anderen Seiten teilen

"memory_limit" ist etwas ganz anderes und besagt nur, wieviel Speicher das Skript zur Laufzeit maximal benutzen darf. Wenn es mehr nutzen will, wird das Skript abgebrochen und es steht eine Fehlermeldung in der error_log.

Sicher dass die bei dir auch gefüllt wird? Ich hatte das mal bei einem VirtualHost, da hab ich kein errorLog angegeben (sollte das Standardlog verwendet werden) und erst nachdem ich explizit da eins angegeben hatte, hab ich auch was darin gehabt.

Oh, hab ich bis jetzt nicht geschaut :hells:

Da steht folgende Meldung (bei einem Fehler):

Allowed memory size of 8388608 bytes exhausted (tried to allocate 2091716 bytes)

Aber wenn ich zählen kann dann sind für mich 8388608 mehr als 2091716

Oder verstehe ich da was falsch?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Aber wenn ich zählen kann dann sind für mich 8388608 mehr als 2091716

Oder verstehe ich da was falsch?

Das besagt nur, dass du in dem Moment knapp 2 MB angefordert hast. Die anderen waren davor schon verbraucht.

Kannst dir mit memory_get_usage den Verbrauch deines Skripts ausgeben lassen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Das besagt nur, dass du in dem Moment knapp 2 MB angefordert hast. Die anderen waren davor schon verbraucht.

Kannst dir mit memory_get_usage den Verbrauch deines Skripts ausgeben lassen.

Ok. Mit den alten Testwerten.

Ausgabe memory_get_usage() bei "1600000": 3259912

Ausgabe memory_get_usage() bei "1700000": 58832

Die Ausgabe erfolge jeweils nach print_r($_POST);

Dann noch bei "1700000" der Fehler in error_log

Allowed memory size of 8388608 bytes exhausted (tried to allocate 3400001 bytes)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ok. Bin leider nicht so html erfahren. Aber im input Element hat es auch das getan was es soll :)

Verhält sich nicht anders wie bereits beschrieben. Wenn ich den genannten Wert überschreite gibt er nur "Array ( )" aus. Aber wie du bereits gesagt hast stehen in $_REQUEST die Daten aus GET, POST, SESSION und COOKIE drinnen...

Offenbar hat es das nicht, denn sonst würde in dem POST-Array Werte enthalten sein.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Offenbar hat es das nicht, denn sonst würde in dem POST-Array Werte enthalten sein.

Wer lesen kann....:rolleyes:

Ich hab doch das sofort ins form Element getan nachdem du mich darauf aufmerksam gemacht hast aber es hat sich nichts geändert. Außerdem funktioniert es ja mit Perl...

Link zu diesem Kommentar
Auf anderen Seiten teilen

Kann mir den Unterschied (3259912 zu 58832) nicht erklären... Poste doch am besten mal dein Skript.

Das fand ich auch sehr komisch....

Skript 1: test.php

______________________________________________

<?php

for($i=0;$i<1700000;$i++)

{

$b .= "1";

}

?>

<html>

<form action="export.php" method="post">

<input type="submit">

<input type="hidden" name="id" value="987654321">

<input type="hidden" name="data" value="<?=$b?>">

</form>

</html>

______________________________________________

Skript 2: export.php

______________________________________________

<?php

echo memory_get_usage() . "<br>";

print_r($_POST);

echo memory_get_usage() . "<br>";

?>

______________________________________________

Link zu diesem Kommentar
Auf anderen Seiten teilen

Oben hast du jeweils nur einen Wert angegeben. Kann es sein, dass durch den Fehler der Wert beim 2ten kleiner ist?

Ach ja, bei mir, hab ich grad gesehen, ist die max_upload_size standardmäßig (Debian Sid, php 5.2) 2M. Kannst du sehen bei phpinfo(); z.B.

Nein. Ich gab die Werte vor und nachher aus weil ich dachte sie würden sich groß unterscheiden. Aber das taten sie nur unerheblich ~(+-100).

Bei mir heißt die upload_max_filesize und die hab ich gleich auf 8M gesetzt. Erfolglos

Link zu diesem Kommentar
Auf anderen Seiten teilen

Das weiß ich nicht :)

max_execution_time: 30

max_input_time: -1

post_max_size: 8M

max_execution_time: 30

Dein Programm wird also nach 30 Sekunden aubgebrochen.

Setz den Wert mal hoch auf 3600 (nur so zum Testen).

Ferner setz den Wert für post_max_size hoch auf 100M

Max_input_time und max_execution_time sollten immer den gleichen Wert haben... also ach rauf damit auf 3600.

Dann sollte das funktionieren.

Ferner versuchst Du gerade eine 1.7 MB große Variable über eine POST methode zu senden...

Da sollte im <form> Tag folgendes stehen:

enctype="multipart/form-data"

Dann wird das auch mit dem Nachbarn klappen.... :D

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Programm wird also nach 30 Sekunden aubgebrochen.

Das ist richtig. Aber ich teste mittlerweile auf "localhost". D.h. es braucht nur einige Sekunden bis die Daten übertragen werden.

Setz den Wert mal hoch auf 3600 (nur so zum Testen).

Ferner setz den Wert für post_max_size hoch auf 100M

Max_input_time und max_execution_time sollten immer den gleichen Wert haben... also ach rauf damit auf 3600.

Dann sollte das funktionieren.

Hab ich gemacht aber funktioniert leider nicht.

Ferner versuchst Du gerade eine 1.7 MB große Variable über eine POST methode zu senden...

Da sollte im <form> Tag folgendes stehen:

enctype="multipart/form-data"

Dann wird das auch mit dem Nachbarn klappen.... :D

Hier hat sich was geändert. Die memory_get_usage() ist nicht mehr so abgefallen sondern hat im vergleich richtige Werte angezeigt. Leider kommt hier dennoch keine Ausgabe im Browser, noch kommt eine Fehlermeldung im error_log. Erhöhe ich die 1.7 MB auf ca. 3 MB dann fällt die memory_get_usage() wieder auf einen merkwürdig kleinen Wert

Link zu diesem Kommentar
Auf anderen Seiten teilen

Merkwürdig, merkwürdig...

Habe es gerade bei mir probiert... Funktioniert....

?!?!

Es ist irgendeine dämliche Einstellung...

Generell muss das funktionieren.

Sorry..

Oh, ok. Das ist gut zu wissen. Danke, dass du es probiert hast.

Ich hab zur Zeit super viel zu tun daher habe ich mich noch nicht mit allen Einstellungen auseinandergesetzt.

Auch aus Zeitgründen habe ich mich dann beim 2-ten Skript für Perl entschieden, da es damit ohne Probleme funktioniert. (Auf den 1-ten habe ich kein Einfluss)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...