Quelqu'un peut-il expliquer à quoi sert le code suivant introduit entre Magento CE 1.9.1.0 et 1.9.2.0?
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);
}
Une fois ces deux fonctions ajoutées, notre importation d'images de la galerie de produits avec l'interface ImportExport a cessé de fonctionner. L'erreur est due à une limite de mémoire (qui s'avère être la limite maximale de taille de fichier ouvert).
Mon idée est que les fichiers ouverts par l'importation ne seront pas fermés correctement.
J'ai également vu qu'il y avait des destruct()
fonctions vides introduites ( Mage_ImportExport_Model_Import_Adapter_Abstract
) - mais les étendre pour qu'elles correspondent à la logique parente n'aide pas.
la source
Avoir les mêmes problèmes avec mon Magento 1.9.2.0 ...
Je ne reçois que cela fonctionne , en changeant Varien_Image_Adapter_Gd2 dans la
/lib/Varien/Image/Adapter/Gd2.php
manière suivante:J'ai remis memory_limit à 1G (auparavant, j'ai augmenté jusqu'à 32 Go) et maintenant cela fonctionne ...
Ce projet met en œuvre ladite procédure de manière conviviale pour Modman. Installez-le simplement avec le compositeur et vous êtes prêt à partir.
la source
Cela faisait partie de la résolution des problèmes de sécurité avec la désérialisation. Les méthodes magiques comme __destruct ont des problèmes inhérents à la sérialisation.
Nous avons vu des exploits proposés qui utilisaient la sérialisation et __destruct pour créer des fichiers dans le système de fichiers - et ce changement (vous verrez des changements plus similaires dans d'autres endroits) a été fait pour éviter cela.
Cela provoque-t-il une fuite de mémoire ou utilise-t-il simplement plus de mémoire jusqu'à la fin du script?
/security/77549/is-php-unserialize-exploitable-without-any-interesting-methods
la source
J'ai donc soulevé un bogue avec Magento, y compris une "solution" qui devrait traiter les problèmes d'utilisation de la mémoire dans le processus d'importation d'image.
La solution peut être trouvée sur github sous https://github.com/sitewards/import_image_memory_leak_fix mais l'idée de base est.
Correction de l'
Mage_Catalog_Helper_Image::validateUploadFile
appel de ladestruct
méthode sur le processeur d'image. Malheureusement, il semble que la valeur par défautVarien_Image
ne traite pas avec undestruct
donc nous avons dû ajouter notre propre classe qui le fait.Et puis une réécriture de l'aide.
Et la nouvelle fonction appelle la nouvelle classe d'images destructibles.
la source