Magento 1.9.2 và php7 - lỗi tải lên hình ảnh


9

Tôi chỉ đang thử nghiệm Magento 1.9.2 với Php 7. Tất cả dường như hoạt động, nhưng đột nhiên tôi cố gắng tải lên hình ảnh cho sản phẩm. Tôi gặp lỗi như dưới đây:

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

Bất cứ ai biết làm thế nào để sửa chữa nó?

Chức năng bị ảnh hưởng trong upload.php tại dòng khoảng 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']);
            }
        }
    }

Câu trả lời:


34

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

Do cú pháp biến thống nhất, mã hiện được giải thích nghiêm ngặt từ trái sang phải.

Dòng

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

nên là

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

Bạn có thể tìm thấy tổng quan về tất cả các tệp để chỉnh sửa trong câu trả lời này .


Thật tuyệt, hoạt động 100% Tôi hy vọng Magento 1.9.2 không có bất kỳ khả năng không tương thích php 7 nào khác. Cảm ơn vì sự giúp đỡ!
sellio

mã này hoạt động với tôi magento 1.9.2.4
matinict

Giải pháp này có tất cả các tệp bạn cần chỉnh sửa để có hiệu suất PHP7 tốt: magento.stackexchange.com/a/105604/37536
Alex Timmer

Tuyệt vời ... Nó hoạt động tốt với tôi
Ramesh Kumar

2

Ngoài các câu trả lời ở trên, đừng quên kiểm tra tệp:

\ bao gồm \ src \ Varien_File_Uploader.php trên dòng 259

Thay thế

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

với

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

chỉ đơn giản là biên dịch lại chứ không phải chỉnh sửa các tệp tạm thời?
Andy
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.