Magento 1.9.2 y php7 - error de carga de imagen

9

Solo estoy probando Magento 1.9.2 con Php 7. Todo parecía funcionar, pero de repente intenté subir una imagen para el producto. Recibí un error como el siguiente:

Fatal error</b>:  Uncaught Error: Function name must be a string in /home/admin/domains/store.com/public_html/dev/lib/Varien/File/Uploader.php:259
Stack trace:
#0 /home/admin/domains/store.com/public_html/dev/lib/Varien/File/Uploader.php(180): Varien_File_Uploader-&gt;_validateFile()
#1 /home/admin/domains/store.com/public_html/dev/app/code/core/Mage/Adminhtml/controllers/Catalog/Product/GalleryController.php(46): Varien_File_Uploader-&gt;save('/home/admin/dom...')
#2 /home/admin/domains/store.com/public_html/dev/app/code/core/Mage/Core/Controller/Varien/Action.php(418): Mage_Adminhtml_Catalog_Product_GalleryController-&gt;uploadAction()
#3 /home/admin/domains/store.com/public_html/dev/app/code/core/Mage/Core/Controller/Varien/Router/Standard.php(254): Mage_Core_Controller_Varien_Action-&gt;dispatch('upload')
#4 /home/admin/domains/store.com/public_html/dev/app/code/core/Mage/Core/Controller/Varien/Front.php(172): Mage_Core_Controller_Varien_Router_Standard-&gt;match(Object(Mage_Core_Controller in <b>/home/admin/domains/store.com/public_html/dev/lib/Varien/File/Uploader.php

Alguien sabe como arreglarlo?

Función afectada en upload.php en la línea alrededor de 259

protected function _validateFile()
    {
        if ($this->_fileExists === false) {
            return;
        }

        //is file extension allowed
        if (!$this->checkAllowedExtension($this->getFileExtension())) {
            throw new Exception('Disallowed file type.');
        }
        //run validate callbacks
        foreach ($this->_validateCallbacks as $params) {
            if (is_object($params['object']) && method_exists($params['object'], $params['method'])) {
                $params['object']->$params['method']($this->_file['tmp_name']);
            }
        }
    }
sellio
fuente

Respuestas:

34

http://php.net/manual/de/migration70.incompatible.php https://wiki.php.net/rfc/uniform_variable_syntax

Debido a la sintaxis variable uniforme, el código ahora se interpreta estrictamente de izquierda a derecha.

La línea

$params['object']->$params['method']($this->_file['tmp_name']);

debiera ser

$params['object']->{$params['method']}($this->_file['tmp_name']);

Puede encontrar una descripción general de todos los archivos para editar en esta respuesta .

Detzler
fuente
Genial, funciona al 100%. Espero que Magento 1.9.2 no tenga ninguna otra incompatibilidad con php 7. ¡Gracias por la ayuda!
sellio
este código funciona para mí magento 1.9.2.4
matinict
Esta solución tiene todos los archivos que necesitará editar para un buen rendimiento de PHP7
Alex Timmer
Impresionante ... Funciona bien para mí
Ramesh Kumar
2

Además de las respuestas anteriores, no olvide comprobar el archivo:

\ incluye \ src \ Varien_File_Uploader.php en la línea 259

Reemplazar

$params['object']->$params['method']($this->_file['tmp_name']);

con

$params['object']->{$params['method']}($this->_file['tmp_name']);
Drashya Kuruwa
fuente
¿simplemente volver a compilar en lugar de editar estos archivos temporales?
Andy