Alguém pode explicar, para que é utilizado o seguinte código introduzido entre o Magento CE 1.9.1.0 e 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);
}
Após a adição dessas duas funções, nossa importação de imagens da galeria de produtos com a interface ImportExport parou de funcionar. O erro ocorre devido a um limite de memória (que acaba sendo o limite máximo de tamanho de arquivo aberto).
Minha ideia é que os arquivos abertos pela importação não sejam fechados corretamente.
Vi também que algumas destruct()
funções vazias foram introduzidas ( Mage_ImportExport_Model_Import_Adapter_Abstract
) - mas estendê-las para corresponder à lógica dos pais não ajuda.
fonte
Tendo os mesmos problemas com o meu Magento 1.9.2.0 ...
Eu só consigo fazer isso alterando Varien_Image_Adapter_Gd2 da
/lib/Varien/Image/Adapter/Gd2.php
seguinte maneira:Eu configurei o memory_limit de volta para 1G (anteriormente eu levantei até 32GB) e agora funciona ...
Este projeto implementa o referido procedimento de maneira amigável ao modman. Basta instalá-lo com o compositor e pronto.
fonte
Foi parte da correção de problemas de segurança com desserialização. Métodos mágicos como __destruct têm problemas inerentes à serialização.
Vimos explorações propostas que estavam usando serialização e __destruct para criar arquivos no sistema de arquivos - e essa alteração (você verá alterações mais semelhantes em outros lugares) foi feita para evitar isso.
Isso causa vazamento de memória ou apenas usa mais memória até o script terminar?
/security/77549/is-php-unserialize-exploitable-without-any-interesting-methods
fonte
Então, eu levantei um bug com o Magento, incluindo uma "solução" que deveria lidar com os problemas de uso de memória no processo de importação de imagens.
A solução pode ser encontrada no github em https://github.com/sitewards/import_image_memory_leak_fix, mas a idéia básica é.
Corrigindo o
Mage_Catalog_Helper_Image::validateUploadFile
para realmente chamar odestruct
método no processador de imagem. Infelizmente, parece que o padrãoVarien_Image
não lida com um,destruct
por isso tivemos que adicionar nossa própria classe.E então uma reescrita do ajudante.
E a nova função chama a nova classe de imagem destrutível.
fonte