roomi Geschrieben 28. November 2006 Geschrieben 28. November 2006 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 Zitieren
geloescht_JesterDay Geschrieben 29. November 2006 Geschrieben 29. November 2006 Hast du auch mal in der php.ini nachgesehen? PHP: Beschreibung der core php.ini Einstellungen - Manual Wobei der Standardwert 8M ist und deine Daten einmal 1,5 MB und dann 1,6 MB sind... Zitieren
etreu Geschrieben 29. November 2006 Geschrieben 29. November 2006 Hast du nur vergessen im form-Element das Attribut method="post" zu setzen oder hast du es bisher nicht gemacht? Zitieren
roomi Geschrieben 29. November 2006 Autor Geschrieben 29. November 2006 @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 Zitieren
roomi Geschrieben 29. November 2006 Autor Geschrieben 29. November 2006 Hab grad entdeckt, dass es wohl doch ein PHP Problem ist. Hab das Ganze mal mit einem Perl-Skript probiert und ich kann auf jeden Fall mehr Daten senden die auch ankommen. Zitieren
etreu Geschrieben 29. November 2006 Geschrieben 29. November 2006 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) Zitieren
geloescht_JesterDay Geschrieben 29. November 2006 Geschrieben 29. November 2006 @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. Zitieren
roomi Geschrieben 29. November 2006 Autor Geschrieben 29. November 2006 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... Zitieren
roomi Geschrieben 29. November 2006 Autor Geschrieben 29. November 2006 "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? Zitieren
geloescht_JesterDay Geschrieben 29. November 2006 Geschrieben 29. November 2006 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. Zitieren
roomi Geschrieben 29. November 2006 Autor Geschrieben 29. November 2006 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) Zitieren
etreu Geschrieben 29. November 2006 Geschrieben 29. November 2006 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. Zitieren
roomi Geschrieben 29. November 2006 Autor Geschrieben 29. November 2006 Offenbar hat es das nicht, denn sonst würde in dem POST-Array Werte enthalten sein. Wer lesen kann.... 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... Zitieren
geloescht_JesterDay Geschrieben 29. November 2006 Geschrieben 29. November 2006 Ausgabe memory_get_usage() bei "1600000": 3259912 Ausgabe memory_get_usage() bei "1700000": 58832 Die Ausgabe erfolge jeweils nach print_r($_POST); Kann mir den Unterschied (3259912 zu 58832) nicht erklären... Poste doch am besten mal dein Skript. Zitieren
roomi Geschrieben 29. November 2006 Autor Geschrieben 29. November 2006 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>"; ?> ______________________________________________ Zitieren
geloescht_JesterDay Geschrieben 29. November 2006 Geschrieben 29. November 2006 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. Zitieren
Eupinkepank Geschrieben 29. November 2006 Geschrieben 29. November 2006 Stimmen denn die Werte für max_execution_time max_input_time post_max_size ??? Sie sollten schon dementsprechend dimensioniert sein. Zitieren
roomi Geschrieben 29. November 2006 Autor Geschrieben 29. November 2006 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 Zitieren
roomi Geschrieben 29. November 2006 Autor Geschrieben 29. November 2006 Stimmen denn die Werte für max_execution_time max_input_time post_max_size ??? Sie sollten schon dementsprechend dimensioniert sein. Das weiß ich nicht max_execution_time: 30 max_input_time: -1 post_max_size: 8M Zitieren
Eupinkepank Geschrieben 29. November 2006 Geschrieben 29. November 2006 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.... Zitieren
roomi Geschrieben 30. November 2006 Autor Geschrieben 30. November 2006 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.... 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 Zitieren
Eupinkepank Geschrieben 30. November 2006 Geschrieben 30. November 2006 Merkwürdig, merkwürdig... Habe es gerade bei mir probiert... Funktioniert.... ?!?! Es ist irgendeine dämliche Einstellung... Generell muss das funktionieren. Sorry.. Zitieren
roomi Geschrieben 30. November 2006 Autor Geschrieben 30. November 2006 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) Zitieren
Empfohlene Beiträge
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.