Domanda

PHP 7 sta raggiungendo lo stato beta e un sacco di test stanno succedendo al momento.Dato che Magento coinvolto nell'ultimo anno da "Esegui solo su PHP 5.3" a "Completamente compatibile con PHP 5.6", vorrei sapere quanto stiano considerando la compatibilità PHP 7 per Magento 1.x così come Magento 2.

Ho trovato Questo post di Anna Filina dove ha trovato un problema in Magento 1.9.1 (Ancora invariato in 1.9.2), ma dato che Magento 1 non ha test universitari, non mi fido che questo fosse l'unico problema.

Quindi la domanda è: sarà garantita la compatibilità PHP 7 per Magento 1?E come probabilmente Magento 2 è già stato testato su PHP 7 (grazie test automatizzati!), Ci sono problemi noti?

È stato utile?

Soluzione

Magento ha annunciato ufficialmente il 20 gennaio 2016, che CE e EE 2.0.1 supportano ufficialmente PHP 7.0.2.

.

Magento Enterprise Edition e Community Edition 2.0.1 sono ora Disponibile e dispone di importanti aggiornamenti di sicurezza e funzionali, Compreso il supporto ufficiale per PHP7.0.2.

link: https://magento.com/blog/technical/new-Magento-20-risorse-e-support-php7

Altri suggerimenti

Se si utilizza la versione più recente, M CE 1.9.2.2, c'è un'estensione che lo porterà a piena compatibilità PHP 7: https://github.com/inchoo/inchoo_php7 .(Disclaimer: sono l'autore, anche se c'è molto aiuto dalla comunità.)

È anche installabile tramite compositore da http://packages.firegento.com/ .

Tutte le incompatibilità menzionate qui sono fisse.Pensiamo che ci siano ancora alcuni casi di bordo, ma niente mostrano.Test, rilascio di emissione e richieste di tiro sono benvenuti.

Nessuna idea di PHP7, ma immagino che la maggior parte delle cose sia ancora valida in PHP7, puoi trovare maggiori informazioni nel blog di Matthias Geniar

.
    .
  • ext / mysql: Nonostante sia una vecchia estensione MySQL, pensai che sia ancora molto ampiamente usato, ma è il momento di tutti spostati a PDO_MYSQL.
  • set_magic_quotes_runtime e magic_quotes_runtime: Sembra che abbia visto queste note deprecazioni da quando ... per sempre?
  • iconv.input_encoding, iconv.output_encoding: Finora, non ho mai avuto un uso per questi ...
  • # Style Commenti nei file INI: Hooray per la coerenza, ho sempre preferito; (semicolo) Commenti in file .ini!
  • preg_replace() Eval Modifier: HOORAY per SysAdmins di sicurezza della sicurezza!

Penso che l'unica cosa che potremmo avere in Magento è preg_replace() Eval Modifier ma si spera che non sia.

Accanto a questo, Magento spedito 1.9.2 Con un TAF aggiornato, puoi trovare in Dev. Con questo dovresti essere in grado di eseguire un grappolo di test frontend su PHP7 ed esaminare il registro in seguito

Nessun commento su magento 1, ma Magento 2 ha avuto alcuni problemi con i nomi di classe come "stringa".Non ci è voluto molto per risolvere, ma non ha funzionato fuori dalla scatola.Mi aspetto che Magento 2 venga risolto, ma potrebbe non essere riparato ancora a causa di altre priorità.

È quasi pronto.Ho provato a gestire un Magento pulito 1.9.2.1 con PHP 7 RC1, che ha portato a un incidente istantaneo (errore irreversibile) di Magento.Dopo aver fissato questo problema, tutto sembrava funzionare, tranne il backend, a cui non sono stato effettuato il login.Più tardi si è rivelato un problema correlato alla sessione che può essere rattoppato.

brevemente:

    .
  1. L'errore irreversibile può essere fissato sovridendo Mage_Core_Model_Layout quindi cambiando la linea 555 da:
    $out .= $this->getBlock($callback[0])->$callback[1]();
    . in
    $out .= $this->getBlock($callback[0])->{$callback[1]}();

  2. Il problema della sessione può essere temporaneamente fissato mediante sovrascrivere Mage_Core_Model_Session_Abstract_Varien e riscrittura del getData, setData, unsetData, i metodi addFullNames, quindi ovunque in cui è stato utilizzato $this->_data, verrà sostituito da $_SESSION.

  3. Se qualcuno è interessato alla soluzione, può essere trovato qui .

Magento2 è pronto per PHP 7. L'adattamento del codice a PHP7 è stato fatto e tutte le modifiche sono disponibili per lo sviluppo del ramo.Vedi il problema su github

Inoltre, il supporto di PHP 7 in Magento1 richiede cambiamenti incompatibili all'indietro e penso che non sarà supportato ufficialmente.

C'è un problema con il modo in cui Magento calcola il Grand Total, e applicando gli sconti.Questo sta anche fermando il checkout Express PayPal, poiché gli elementi pubblicitari non si sommano al Grand Total con lo sconto.

Il problema sembra essere che il Mage_Sales_Model_Config_Ordered::_compareTotals() non funziona lo stesso in PHP7 come PHP5 e uasort() sta ora affidando sulla relazione transitiva per l'ordinamento, ma questo non deve essere per i totali dell'ordine.

Prova ad usare: -

protected function _getSortedCollectorCodes()
{
    if (Mage::app()->useCache('config')) {
        $cachedData = Mage::app()->loadCache($this->_collectorsCacheKey);
        if ($cachedData) {
            return unserialize($cachedData);
        }
    }
    $configArray = $this->_modelsConfig;
    // invoke simple sorting if the first element contains the "sort_order" key
    reset($configArray);
    $element = current($configArray);
    if (isset($element['sort_order'])) {
        uasort($configArray, array($this, '_compareSortOrder'));
    } else {
        foreach ($configArray as $code => $data) {
            foreach ($data['before'] as $beforeCode) {
                if (!isset($configArray[$beforeCode])) {
                    continue;
                }
                $configArray[$code]['before'] = array_unique(array_merge(
                    $configArray[$code]['before'], $configArray[$beforeCode]['before']
                ));
                $configArray[$beforeCode]['after'] = array_merge(
                    $configArray[$beforeCode]['after'], array($code), $data['after']
                );
                $configArray[$beforeCode]['after'] = array_unique($configArray[$beforeCode]['after']);
            }
            foreach ($data['after'] as $afterCode) {
                if (!isset($configArray[$afterCode])) {
                    continue;
                }
                $configArray[$code]['after'] = array_unique(array_merge(
                    $configArray[$code]['after'], $configArray[$afterCode]['after']
                ));
                $configArray[$afterCode]['before'] = array_merge(
                    $configArray[$afterCode]['before'], array($code), $data['before']
                );
                $configArray[$afterCode]['before'] = array_unique($configArray[$afterCode]['before']);
            }
        }
        foreach ($configArray as $code => $data) {
           $largest_small = $smallest_large = 0;
           foreach ($data['after'] as $afterCode) {
              if(isset($configArray[$afterCode]['sort_order']) && $largest_small < $configArray[$afterCode]['sort_order'])
                 $largest_small = $configArray[$afterCode]['sort_order'];
           }
           foreach ($data['before'] as $beforeCode) {
              if(isset($configArray[$beforeCode]['sort_order']) && ($smallest_large == 0 || $configArray[$beforeCode]['sort_order'] < $smallest_large)) 
                 $smallest_large = $configArray[$beforeCode]['sort_order'];
           }
           if($smallest_large <= $largest_small+1){
              if($smallest_large == 0) $smallest_large = $largest_small+1;
              $add = $largest_small+2-$smallest_large;
              foreach ($configArray as $code1 => $data1) {
                 if(!isset($data1['sort_order'])) break;
                 if($smallest_large <= $data1['sort_order'])
                    $configArray[$code1]['sort_order'] += $add;
               }
           }
           $configArray[$code]['sort_order'] = $largest_small+1;
        }
        uasort($configArray, array($this, '_compareSortOrder'));
    }
    $sortedCollectors = array_keys($configArray);
    if (Mage::app()->useCache('config')) {
        Mage::app()->saveCache(serialize($sortedCollectors), $this->_collectorsCacheKey, array(
                Mage_Core_Model_Config::CACHE_TAG
            )
        );
    }
    return $sortedCollectors;
}
.

Questa è la mia ricerca che voglio condividere con voi sulle incompatibilità Magento PHP7. Attualmente ho trovato alcuni posti in cui il codice dovrebbe fallire a causa della sintassi variabile uniforme.

File: App / Code / Core / Mage / ImportExport / Modello / Esportazione / Entity / Prodotto / Tipo / Abstract.php

Metodo: overrideattribute

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

File: App / Codice / Core / Mage / ImportExport / Model / Export / Entity / Customer.php

Metodo: filterattributeCollection

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

File: App / Codice / Core / Mage / ImportExport / Model / Import / Uploader.php

Metodo: _ValidateFile

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

File: App / Code / Core / Mage / Catalogo / Modello / Prodotto / Link / API / V2.php

Metodo: ASSIGN

if (isset($data->$attribute['code'])) {
    $links[(int)$linkedProductId][$attribute['code']] = $data->$attribute['code'];
}
.

File: App / Code / Core / Mage / Catalogo / Modello / Prodotto / Link / API / V2.php

Metodo: Aggiornamento

$data->$attribute['code']
.

File: Lib / Varien / File / Uploader.php

Metodo: _ValidateFile

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

File: app / code / core / mage / core / modello / layout.php

Metodo: getOutput

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

Oltre alle altre risposte relative a magento 1:

Un PHP 7 Incompatibilità in Zend_XmlRpc_Server è stato fissato in Zend Framework 1.12.12

Tutte le versioni precedenti 1,9.2.2 / EE 1.14.2.2 Utilizzare una versione precedente di Zend Framework, quindi potrebbe avere problemi se si utilizza l'API XML-RPC di Magento.

Controllare i file da Inchoo che vengono modificati in Made M1 compatibili con PHP 7, quelli sono minori cambiamenti in pochi file ma il lavoro intelligente da Incoo. https://github.com/inchoo/inchoo_php7/tree/ Master / App / Codice / Locale / Incooo / PHP7

Sto usando Magento 2 CE versione 2.1.4 e funziona bene.

magento \ app \ bootstrap.php

if (!defined('PHP_VERSION_ID') || !(PHP_VERSION_ID >= 50005 && PHP_VERSION_ID < 50700 || PHP_VERSION_ID === 70002 || PHP_VERSION_ID === 70004 || PHP_VERSION_ID >= 70006)) {
    if (PHP_SAPI == 'cli') {
        echo 'Magento supports PHP 5.6.5, 7.0.2, 7.0.4 and 7.0.6 or later. ' .
            'Please read http://devdocs.magento.com/guides/v1.0/install-gde/system-requirements.html';
    } else {
        echo <<<HTML
<div style="font:12px/1.35em arial, helvetica, sans-serif;">
    <p>Magento supports PHP 5.6.5, 7.0.2, 7.0.4 and 7.0.6 or later. Please read
    <a target="_blank" href="http://devdocs.magento.com/guides/v1.0/install-gde/system-requirements.html">
    Magento System Requirements</a>.
</div>
HTML;
    }
    exit(1);
}
.

risposta breve è no, non lo è.Magento CE 1.9.2.4 supporta solo PHP 5.4 e 5.5 ufficialmente.E mentre PHP 5.6 funziona bene, satura i file di registro con multitudini di messaggi di avviso.

Risposta lunga è che è relativamente facile modificarlo per eseguire il supporto PHP7.Tuttavia molte estensioni non sono ancora compatibili con PHP7, quindi sei in gran parte da solo.

PHP 7.0 è la fine della vita a partire dalla prima settimana di dicembre 2018.

A partire da questo post, la versione corrente di Magento 2.2.3 (versione 20 febbraio 2018) non supporta PHP 7.1 o PHP 7.2.

È possibile confermare le versioni supportate controllando app/bootstrap.php nella cartella Magento Install e cerca il codice simile a quanto segue:

/* PHP version validation */
if (!defined('PHP_VERSION_ID') || !(PHP_VERSION_ID === 70002 || PHP_VERSION_ID === 70004 || PHP_VERSION_ID >= 70006)) {
    if (PHP_SAPI == 'cli') {
        echo 'Magento supports 7.0.2, 7.0.4, and 7.0.6 or later. ' .
            'Please read http://devdocs.magento.com/guides/v1.0/install-gde/system-requirements.html';
    } else {
        echo <<<HTML
<div style="font:12px/1.35em arial, helvetica, sans-serif;">
    <p>Magento supports PHP 7.0.2, 7.0.4, and 7.0.6 or later. Please read
    <a target="_blank" href="http://devdocs.magento.com/guides/v1.0/install-gde/system-requirements.html">
    Magento System Requirements</a>.
</div>
HTML;
    }
    exit(1);
}
.

Sembra anche essere problemi in .htaccess che causano 500 errori con Apache 2.4.

Inoltre, il file compositore incluso contiene solo dipendenze per PHP5.5

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