Может кто-нибудь объяснить, для чего используется следующий код, введенный между Magento CE 1.9.1.0 и 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);
}
После того, как эти две функции были добавлены, наш импорт изображений галереи продуктов с интерфейсом ImportExport перестал работать. Ошибка возникает из-за ограничения памяти (которое соответствует максимальному размеру открытого файла).
Моя идея заключается в том, что файлы, открытые при импорте, не будут закрыты правильно.
Я также увидел, что были destruct()
введены некоторые пустые функции ( Mage_ImportExport_Model_Import_Adapter_Abstract
), но расширение их для соответствия родительской логике не помогает.
источник
Имея те же проблемы с моим Magento 1.9.2.0 ...
Я получаю только это работать, изменяя Varien_Image_Adapter_Gd2 в
/lib/Varien/Image/Adapter/Gd2.php
следующим образом :Я установил memory_limit обратно в 1G (ранее я поднял до 32 ГБ), и теперь это работает ...
Этот проект реализует указанную процедуру в удобной форме. Просто установите его с композитором, и все готово.
источник
Это было частью решения проблем безопасности с помощью unserialize. У таких магических методов, как __destruct, есть проблемы с сериализацией.
Мы видели предложенные эксплойты, которые использовали сериализацию и __destruct для создания файлов в файловой системе - и это изменение (вы увидите больше подобных изменений в других местах) было сделано, чтобы избежать этого.
Это вызывает утечку памяти или просто использует больше памяти, пока сценарий не завершится?
/security/77549/is-php-unserialize-exploitable-without-any-interesting-methods
источник
Поэтому я поднял ошибку в Magento, включая «решение», которое должно было решить проблемы с использованием памяти в процессе импорта изображений.
Решение можно найти на github по адресу https://github.com/sitewards/import_image_memory_leak_fix, но основная идея такова.
Исправление
Mage_Catalog_Helper_Image::validateUploadFile
для фактического вызоваdestruct
метода на процессоре изображений. К сожалению, кажется, что по умолчаниюVarien_Image
не работает,destruct
поэтому нам пришлось добавить свой собственный класс, который делает.А потом переписать помощника.
И новая функция вызывает новый разрушаемый класс изображений.
источник