firegento / firegento-pdf

Generates nicer and configurable PDF for invoices, creditmemos and shippings in Magento
100 stars 62 forks source link

Fatal error: Allowed memory size of 1073741824 bytes exhausted (tried to allocate 65488 bytes) in ...app/code/core/Mage/Core/Model/Config.php on line 1334 #333

Closed xonu closed 6 years ago

xonu commented 8 years ago

Fehlermeldung

In einem aktualisierten Shop hat die Erweiterung den Speicherfehler produziert:

Fatal error: Allowed memory size of 1073741824 bytes exhausted (tried to allocate 65488 bytes) in ...app/code/core/Mage/Core/Model/Config.php on line 1334

Inzwischen haben wir die Lösung selbst gefunden (und sie besteht nicht darin memory_limit zu erhöhen), daher ist dieser Beitrag als Hilfe für andere gedacht und ggf. als Verbesserungsvorschlag.

Problemlösung

Die Problemlösung vorab: Systemkonfiguration > Verkäufe: PDF-Ausdrucke aufrufen und speichern (egal mit welchen Einstellungen). Dadurch werden alte Daten in der Datenbank überschrieben und der Fehler behoben.

Fehlerursache

Die Zeile 55 in FireGento_Pdf_Model_Invoice sieht wie folgt aus: $modelClass = Mage::getStoreConfig('sales_pdf/invoice/engine'); In unserem Fall war "firegento_pdf/invoice" als Wert in der Konfigurationstabelle gespeichert, vermutlich von einer alten Version der Erweiterung. (Korrekter Wert wäre "firegento_pdf/engine_invoice_default".)

FireGento_Pdf_Model_Invoice::getEngine() lieferte dann die eigene Klasse (d. h. FireGento_Pdf_Model_Invoice) als Ergebnis. Die Folge ist Rekursion in FireGento_Pdf_Model_Invoice::getPdf().

Die Methode verfügt über eine Fallback-Bedingung. Doch weil die Klasse ja existiert, hat sie nicht gegriffen. Eventuell wäre es zuverlässiger, die Bestimmung der Klasse von der Datenbank zu entkoppeln, damit feste Werte "sales_pdf/invoice/engine" oder "firegento_pdf/engine_invoice_default" geliefert werden, die nicht erst in der Datenbank gespeichert werden müssen.

Schrank commented 8 years ago

Danke für die Info, ich merke das zum fixen vor!