¿Alguien puede explicar para qué se utiliza el siguiente Código introducido entre Magento CE 1.9.1.0 y 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);
}
Después de agregar esas dos funciones, nuestra importación de imágenes de la galería de productos con la interfaz ImportExport dejó de funcionar. El error se debe a un límite de memoria (que resulta ser el límite máximo de tamaño de archivo abierto).
Mi idea es que los archivos abiertos por la importación no se cerrarán correctamente.
También vi que se destruct()
introdujeron algunas funciones vacías ( Mage_ImportExport_Model_Import_Adapter_Abstract
), pero extenderlas para que coincidan con la lógica principal no ayuda.
fuente
Tener los mismos problemas con mi Magento 1.9.2.0 ...
Solo hago que esto funcione cambiando Varien_Image_Adapter_Gd2 de la
/lib/Varien/Image/Adapter/Gd2.php
siguiente manera:He configurado memory_limit de nuevo a 1G (anteriormente subí hasta 32GB) y ahora funciona ...
Este proyecto implementa dicho procedimiento de manera amigable con el modman. Simplemente instálalo con el compositor y listo.
fuente
Fue parte de la solución de problemas de seguridad con unserialize. Los métodos mágicos como __destruct tienen problemas inherentes con la serialización.
Hemos visto exploits propuestos que usaban serialización y __destruct para crear archivos en el sistema de archivos, y este cambio (verá más cambios similares en otros lugares) se realizó para evitar esto.
¿Causa pérdida de memoria o simplemente usa más memoria hasta que finaliza el script?
/security/77549/is-php-unserialize-exploitable-without-any-interesting-methods
fuente
Así que planteé un error con Magento, incluida una "solución" que debería tratar los problemas de uso de memoria en el proceso de importación de imágenes.
La solución se puede encontrar en github en https://github.com/sitewards/import_image_memory_leak_fix pero la idea básica es.
Arreglando el
Mage_Catalog_Helper_Image::validateUploadFile
para llamar realmente aldestruct
método en el procesador de imágenes. Lamentablemente, parece que el valor predeterminadoVarien_Image
no trata con undestruct
por lo que hemos tenido que agregar nuestra propia clase que sí lo hace.Y luego una reescritura del ayudante.
Y la nueva función llama a la nueva clase de imagen destruible.
fuente