Moin!
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 30356350 bytes) in Unknown on line 0
mit diesem Problem hatte ich neulich auch zu kämpfen - um am Ende festzustellen, dass mein eigentliches Problem "ein blödes B" gewesen war.
Wenn du das Memory-Limit auf "128MB" festsetzt, und daraus wenige Kilobyte gemacht würden, würde bei "allowed memory size of '134 Million' bytes" nicht 134 Millionen Bytes erwähnt werden, sondern die paar tausend Bytes.
die 128MB Grenze zu überlaufen? Ist soviel anderes im Speicher?
Wenn Du explizit den Wert "128MB" eingestellt hast, dann missversteht PHP diesen Wert und richtet Dir _keine_ 128MB ein, sondern nur einige Kilobyte! Der Wert muss exakt "128M" lauten (ohne "das blöde B")!
Und je nach Anwendungsfall kann es durchaus sein, dass PHP im Hintergrund viel Speicher allozieren will, besonders dann, wenn Du Grafikdaten oder umfangreiche Datenbank-Ergebnisse bearbeiten willst.
Man darf davon ausgehen, dass PHP alle Variablen und außerdem eingebundene Ressourcen im Speicher hält. Wenn man in Speicherknappheit gerät, gibts nur zwei Auswege: Entweder das Speicherlimit hochsetzen (das ist recht einfach machbar, löst aber unter Umständen die Ursache des Problems nicht), oder den Code durchgehen und explizit das Säubern überflüssiger Variablen und das Freigeben nicht mehr benötigter Ressourcen hineinzuprogrammieren.
Und ggf. auch das korrekte manuelle Auflösen zirkulärer Referenzen in Objekten! Wobei PHP 5.3 in diesem Punkt auch mit seiner internen Garbage-Collection endlich aufräumen kann, die Versionen davor können das noch nicht.
- Sven Rautenberg