Domanda

Magento 1.9.4 non funziona con PHP 7, mostra errore come di seguito:

Fatal error: Uncaught Error: Function name must be a string in 
app\code\core\Mage\Core\Model\Layout.php:555 Stack trace: #0 
app\code\core\Mage\Core\Controller\Varien\Action.php(390): Mage_Core_Model_Layout->getOutput() #1 
app\code\core\Mage\Cms\Helper\Page.php(137): Mage_Core_Controller_Varien_Action->renderLayout() #2 
app\code\core\Mage\Cms\Helper\Page.php(52): Mage_Cms_Helper_Page->_renderPage(Object(Mage_Cms_IndexController), 'home') #3 
app\code\core\Mage\Cms\controllers\IndexController.php(45): Mage_Cms_Helper_Page->renderPage(Object(Mage_Cms_IndexController), 'home') #4 
app\code\core\Mage\Core\Controller\Varien\Action.php(418): Mage_Cms_IndexController->indexAction() #5 
app\code\core\Mage\Core\Controller\Varien\Router\Standard.php(254): Mage_Core_Controller_Varien_Action->dispatch('index') #6 
app\code\core\Mage\Core\Model\Layout.php on line 555
.

È stato utile?

Soluzione

Succede perché in PHP 7 È necessario chiarire che si chiamano la $callback variabile come metodo (funzione).Quindi, la riga originale del codice sembra quanto segue (file app/code/core/Mage/Core/Model/Layout.php):

$out .= $this->getBlock($callback[0])->$callback[1]();
.

Per farlo funzionare sull'ultima versione PHP dobbiamo sostituire questo pezzo di codice da questo:

$out .= $this->getBlock($callback[0])->{$callback[1]}();
.

Segnala Questo blog per ulteriori informazioni.

Altri suggerimenti

Se si desidera eseguire il tuo sito web Magento 1.x su PHP7, è necessario effettuare alcune piccole modifiche nei tuoi file Magento 1.x per farlo funzionare senza problemi.

La maggior parte del codice Magento è ancora valido in PHP 7, ci sono poche incompatibilità elencate di seguito:

1. Problemi di sintassi variabili uniformi:

.

1.1 app / code / core / mage / core / modello / layout.php: 555

Questo file causa e errore fatale che si blocca magento. Sovrascrivere il file e Sostituisci

$out .= $this->getBlock($callback[0])->$callback[1]();
.

con

$out .= $this->getBlock($callback[0])->{$callback[1]}();
.

.

1.2 app \ code \ core \ mage \ importexport \ modello \ import \ uploader.php: 135

Questo file Effects Magento CSV Importatore. Sostituire il file, quindi sovrascrivere la funzione _validatefile () e sostituire la linea 135 con Sostituisci

$params['object']->$params['method']($filePath);
.

con

$params['object']->{$params['method']}($filePath);
.

.

1.3 App \ Code \ Core \ Mage \ Importexport \ Modello \ Esporta \ Entity \ Prodotto \ Type \ Abstract.php: 99

Questo problema Effetto la funzionalità di esportazione di Magento. Magento estende tre classi di sopra la classe astratta, quindi la causa principale dell'errore all'interno della classe è la linea # 99 nella classe sopra la classe.

mage_importexport_model_export_enty_product_type_configurableurble Mage_importexport_model_export_enty_product_type_grouped. Mage_importexport_model_export_enty_product_type_simple

Dobbiamo scavalcarci sopra tre classi nel nostro pool di codice locale e override overrideationtribute () funzione, sostituire la linea # 99

$data['filter_options'] = $this->$data['options_method']();
.

con

$data['filter_options'] = $this->{$data['options_method']}();
.

.

1.4 App \ Code \ Core \ Mage \ Importexport \ Model \ Export \ Entity \ Customer.php: 250

Questo file Effects Funzionalità di esportazione dei clienti. Sostituisci il file sopra e modifica la linea # 250 come mostrato sotto

$data['filter_options'] = $this->$data['options_method']();
.

con

$data['filter_options'] = $this->{$data['options_method']}();
.

.

1.5 lib \ varien \ file \ uploader.php: 259

Il caricamento del file non funzionerà. Magento estende mage_core_model_file_uploader dalla classe sopra, quindi dobbiamo sovrascrivere questa classe e riscrivere la funzione _validatefile () Sostituire sotto la riga

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

con

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

2. Digita il problema del casting

.

2.1 App \ Code \ Core \ Mage \ Core \ Model \ Resource \ session.php: 218

Sessioni magenta Non funzionano su PHP 7, quindi come risultato Login dell'utente non funziona. Leggi ($ sessid) La funzione deve restituire una stringa in modo da TypeCAst la variabile di ritorno come indicato di seguito

return $data;
.

con

return (string)$data;
.

3. Grande totale errato

I totali errati sono dovuti a ordinamento errato di subtotale, sconto, spedizione ecc Correggere l'ordinamento creando un'estensione e metti sotto il codice in config.xml dell'estensione

<global>
    <sales>
        <quote>
            <totals>
                <msrp>
                    <before>grand_total</before>
                </msrp>
                <shipping>
                    <after>subtotal,freeshipping,tax_subtotal,msrp</after>
                </shipping>
            </totals>
        </quote>
    </sales>
</global>
.

Ecco il riferimento originale a ciò che ho pubblicato sopra: http://scriptbaker.com/tag/magento-1-9/ .

Se non riesci a trovare alcuna query nel tuo codice, quindi questo sarà coperto da magento e come ho detto prima, la maggior parte del codice è valida in modo da poterlo semplicemente ignorarlo. Credo che tutto ciò possa rispondere alla tua domanda.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a magento.stackexchange
scroll top