Schleifenbegrenzung

Liebes Forum :slight_smile: :slight_smile: ich habe ein kleines Problem. Bei folgendem Programmcode: $query = "SELECT option\_id FROM s\_article\_configurator\_set\_option\_relations WHERE set\_id = $set\_ID"; for ($i; $i\<200; $i++) { // sinnfreie Schleife, vereinfacht $options = Shopware()-\>Db()-\>fetchCol($query); } Die Schleife klappt wenn man sie ca 150 Mal ausführt darüber (wie hier zum Beispiel 200 Mal) kommt die folgende Fehlermeldung: Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 3659485 bytes) in F:\xampp\htdocs\performancetest\_konfigurator\_1\engine\Library\Enlight\Event\Handler\Default.php on line 91 503 Service Unavailable Das Programm ist in dieser Form natürlich blödsinnig. Ich habe es nur auf diesen Code reuziert, damit es besser verständlich ist. An der Fehlermeldung ist auch merkwürdig, dass ein kleinerer Wert (3659485) in Anspruch genommen wurde als maximal erlaubt (134217728). Woran kann das liegen? Liebe Grüße Kerstin

Hallo, das sieht nach einem Server Fehler aus, nicht genug Speicher. Darum klappt das auch 'ne Zeit, aber irgendwann ist der Speicher voll. Gruß Frank Gesendet von meinem GT-I9100 mit Tapatalk 2

[quote]Woran kann das liegen?[/quote] An der PHP-Konfiguration? Entweder Memory-Limit hochschrauben oder das Script aufteilen. Wieso muss das ganze denn 200x durchlaufen?

Es macht generell keinen Sinn in eine Schleife eine Datenbankabfrage zu machen. Kannst Du nicht alle benötigten IDs in einer ABfrage holen und dann Deine Schleife damit machen… ansonsten // natürlich ohne echo.. echo ini\_get("memory\_limit")."\n"; ini\_set("memory\_limit","256M"); echo ini\_get("memory\_limit")."\n";

Laut seinem Quelltext ist das Query ohnehin immer das gleiche.

[quote=“Kerstin83”] An der Fehlermeldung ist auch merkwürdig, dass ein kleinerer Wert (3659485) in Anspruch genommen wurde als maximal erlaubt (134217728). [/quote] Hier wird nur die letzte “Aktion” aufgeführt die zum Überschreiten des Limits geführt hat, daher der relativ kleine Wert. Ansonsten kann ich mich meinen Vorrednern nur anschließen: Lieber nur eine DB-Abfrage und dann eine Schleife über das Ergebnis. Habe ich auch gerade in einem Plugin gehabt, weil ich vorher nicht weiter drüber nachgedacht hatte und hatte dann weit über 2000 Queries bei einem Seitenaufruf wodurch ich den Shop super langsam gemacht habe…

Ich gebe auch immer gerne die Empfehlung, sich einmal die vorhanden Funktion der Resourcen und Repositories anzugucken … das meiste findet man doch irgendwie dort, vielleicht auch in deinem Anwendungsfall! Schöne Grüße, Niklas