Magento 1.9.2 i php7 - błąd przesyłania obrazu

9

Właśnie testuję Magento 1.9.2 z Php 7. Wszystko wydawało się działać, ale nagle próbowałem załadować obraz produktu. Mam błąd jak poniżej:

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

Czy ktoś wie jak to naprawić?

Wpływ na funkcję w upload.php na linii około 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
źródło

Odpowiedzi:

34

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

Ze względu na jednolitą składnię zmiennych kod jest teraz interpretowany ściśle od lewej do prawej.

Linia

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

Powinien być

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

W tej odpowiedzi można znaleźć przegląd wszystkich plików do edycji .

Detzler
źródło
Fajnie, działa w 100% Mam nadzieję, że Magento 1.9.2 nie ma żadnej innej niezgodności php 7. Dzięki za pomoc!
sellio
ten kod działa dla mnie magento 1.9.2.4
matinict
To rozwiązanie zawiera wszystkie pliki, które musisz edytować, aby uzyskać dobrą wydajność PHP7
Alex Timmer
Niesamowite ... Działa dla mnie dobrze
Ramesh Kumar
2

Oprócz powyższych odpowiedzi nie zapomnij sprawdzić pliku:

\ zawiera \ src \ Varien_File_Uploader.php w linii 259

Zastąpić

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

z

$params['object']->{$params['method']}($this->_file['tmp_name']);
Drashya Kuruwa
źródło
po prostu ponownie skompilować zamiast edytować te pliki tymczasowe?
Andy,