Kann jemand erklären, wofür der folgende zwischen Magento CE 1.9.1.0 und 1.9.2.0 eingeführte Code verwendet wird?
class Varien_Image_Adapter_Gd2:
public function __construct()
{
// Initialize shutdown function
register_shutdown_function(array($this, 'destruct'));
}
/**
* Destroy object image on shutdown
*/
public function destruct()
{
@imagedestroy($this->_imageHandler);
}
Nachdem diese beiden Funktionen hinzugefügt wurden, funktionierte unser Import von Produktgalerie-Bildern mit der ImportExport-Oberfläche nicht mehr. Der Fehler ist auf ein Speicherlimit zurückzuführen (das die maximale Größe der geöffneten Datei angibt).
Meine Idee ist, dass die durch den Import geöffneten Dateien nicht korrekt geschlossen werden.
Ich habe auch gesehen, dass einige leere destruct()
Funktionen eingeführt wurden ( Mage_ImportExport_Model_Import_Adapter_Abstract
) - aber es hilft nichts, diese so zu erweitern, dass sie mit der übergeordneten Logik übereinstimmen.
quelle
Ich habe die gleichen Probleme mit meinem Magento 1.9.2.0 ...
Ich erhalte nur diese an der Arbeit , indem Varien_Image_Adapter_Gd2 in
/lib/Varien/Image/Adapter/Gd2.php
wie folgt:Ich habe memory_limit auf 1G zurückgesetzt (vorher habe ich auf 32GB erhöht) und jetzt funktioniert es ...
Dieses Projekt implementiert dieses Verfahren auf eine modmanfreundliche Weise. Einfach mit Composer installieren und los geht's.
quelle
Dies war Teil der Behebung von Sicherheitsproblemen mit unseremialize. Magische Methoden wie __destruct haben Probleme mit der Serialisierung.
Es wurden Exploits vorgeschlagen, die Serialisierung und __destruct zum Erstellen von Dateien im Dateisystem verwendeten. Diese Änderung (Sie werden ähnliche Änderungen an anderen Stellen sehen) wurde vorgenommen, um dies zu vermeiden.
Verursacht es einen Speicherverlust oder verbraucht es einfach mehr Speicher, bis das Skript beendet ist?
/security/77549/is-php-unserialize-exploitable-without-any-interesting-methods
quelle
Also habe ich einen Fehler mit Magento gemeldet, der eine "Lösung" enthielt, die die Probleme mit der Speichernutzung beim Import von Bildern beheben sollte.
Die Lösung finden Sie auf github unter https://github.com/sitewards/import_image_memory_leak_fix, aber die Grundidee ist.
Behebung des Problems
Mage_Catalog_Helper_Image::validateUploadFile
, diedestruct
Methode tatsächlich auf dem Bildprozessor aufzurufen . Leider scheint es, dass die StandardeinstellungVarien_Image
nicht mit einer übereinstimmt, so dassdestruct
wir unsere eigene Klasse hinzufügen mussten, die dies tut.Und dann eine Umschreibung des Helfers.
Und die neue Funktion ruft die neue zerstörbare Bildklasse auf.
quelle