Question

PHP 7 est d'atteindre l'état de beta et de nombreux tests sont en cours actuellement.Étant donné que Magento rattrapé au cours de la dernière année de "ne fonctionne que sur PHP 5.3" à "entièrement compatible avec PHP 5.6", je voudrais savoir combien ils envisagent de PHP 7 compatibilité pour Magento 1.x ainsi que Magento 2.

J'ai trouvé ce post par Anna Filina où elle a trouvé un problème dans Magento 1.9.1 (toujours inchangé en 1.9.2), mais étant donné que Magento 1 ne dispose pas de tests unitaires, je ne crois pas que c'était le seul problème.

La question est donc:va PHP 7 compatibilité pour Magento 1-elle être garantie?Et comme Magento 2 a probablement déjà été testé sur PHP 7 (Merci de tests automatisés!), existe-il des problèmes connus?

Était-ce utile?

La solution

Magento a annoncé officiellement le 20 janvier 2016, ce CE et EE 2.0.1 soutien officiellement PHP 7.0.2.

Magento Enterprise Edition et Edition communautaire 2.0.1 sont maintenant Disponible et fonctionnalité de sécurité importante et de mises à jour fonctionnelles, y compris la prise en charge officielle du PHP7.0.2.

Lien: https://magento.com/blog/technique/new-Magento-20-Resources-and-Support-PHP7

Autres conseils

Si vous utilisez la version la plus récente, M CE 1.9.2.2, il y a une extension qui l'apportera à la compatibilité PHP 7 complète: https://github.com/inchoo/inchoo_php7 .(Disclaimer: Je suis l'auteur, bien qu'il y ait beaucoup d'aide de la communauté.)

Il est également installé via le compositeur de http://packages.firegento.com/ .

Toutes les incompatibilités mentionnées ici sont corrigées.Nous pensons qu'il peut toujours y avoir quelques cas de bord, mais rien ne s'arrête.Les tests, les demandeurs d'émission et les demandes de traction sont les bienvenus.

Aucune idée sur PHP7, mais je suppose que la plupart des choses est toujours valable en PHP7, vous pouvez trouver plus d'informations sur le blog de Matthias Geniar

  • ext/mysql: malgré qu'il soit une très ancienne extension MySQL, je voudrais compter qu'il est encore très largement utilisé, mais il est temps que tout le monde a déménagé à pdo_mysql.
  • set_magic_quotes_runtime et magic_quotes_runtime: il semble que j'ai vu ces autodérision avis depuis ...pour toujours?
  • iconv.input_encoding, iconv.output_encoding: jusqu'à présent, je n'ai jamais eu une utilisation de ces...
  • # le style des commentaires dans les fichiers ini: hourra pour des raisons de cohérence, j'ai toujours préféré ;(point-virgule) commentaires .les fichiers ini!
  • preg_replace() eval modificateur: hourra pour la sécurité à l'esprit les administrateurs système!

Je pense que la seule chose que nous pouvons avoir dans Magento est preg_replace() eval modificateur mais j'espère que non.

À côté de cela, Magento livré 1.9.2 avec une mise à jour de TAF, vous pouvez trouver le dev.Avec cela, vous devriez être en mesure d'exécuter un tas de frontend tests sur PHP7 et examinez le journal par la suite

aucun commentaire sur Magento 1, mais Magento 2 a eu des problèmes avec des noms de classe comme "String".Il n'a pas fallu longtemps pour réparer, mais cela n'a pas fonctionné hors de la boîte.Je m'attends à ce que Magento 2 sera corrigé, mais cela pourrait ne pas être résolu en raison d'autres priorités.

Il est presque prêt.J'ai essayé de lancer un nettoyage Magento 1.9.2.1 avec PHP 7 RC1, ce qui a entraîné un instant de collision (erreur fatale) de Magento.Après la résolution de ce problème, tout semble fonctionner, sauf le backend, dont je n'étais pas capable d'ouvrir une session pour.Plus tard, il s'est avéré être une session de problème lié à ce qui peut être corrigé.

Brièvement:

  1. L'erreur fatale peut être résolu en remplaçant Mage_Core_Model_Layout puis, changeant de ligne à partir de 555:
    $out .= $this->getBlock($callback[0])->$callback[1]();
    en
    $out .= $this->getBlock($callback[0])->{$callback[1]}();

  2. La session problème temporairement peut être résolu en remplaçant Mage_Core_Model_Session_Abstract_Varien et la réécriture de l' getData, setData, unsetData, addFullNames méthodes, de sorte que partout où $this->_data a été utilisé, il doit être remplacé par $_SESSION.

Si quelqu'un est intéressé par la solution, il peut être trouvé ici.

Magento2 est prêt pour PHP 7. L'adaptation du code à PHP7 a été effectuée et toutes les modifications sont disponibles dans Développement de la branche.Voir le problème sur Github

En outre, la prise en charge de PHP 7 dans Magento1 nécessite des changements incompatibles vers l'arrière et je pense ne sera pas pris en charge officiellement.

Il y a un problème avec la façon dont Magento est le calcul de l'ordre total, et en appliquant des réductions.C'est aussi l'arrêt de l'Paypal express checkout, comme les éléments de ligne n'est pas de la grand total avec la remise.

Le problème semble être que la Mage_Sales_Model_Config_Ordered::_compareTotals() n'est pas le même dans PHP7 que PHP5, et uasort() est maintenant en s'appuyant sur transitive de la relation-pour la commande, mais cela n'a pas à être pour l'ordre totaux.

Essayez d'utiliser :-

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;
}

Ceci est mes recherches que je veux partager avec vous sur les incompatibilités de Magento PHP7. Actuellement, j'ai trouvé des endroits où le code devrait échouer en raison d'une syntaxe variable uniforme.

Fichier: App / Code / Core / Mage / ImportExport / Modèle / Exportation / Entité / Produit / Type / Abstract.php

Méthode: Remplacement duatTribute

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

Fichier: App / Code / Core / Mage / ImportExport / Modèle / Exportation / Entité / Customer.PHP

Méthode: FilterAttributCollection

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

Fichier: App / Code / Core / Mage / ImportExport / Modèle / Importer / Upploader.php

Méthode: _Validatefile

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

Fichier: App / Code / Core / Mage / Catalogue / Modèle / Produit / Link / API / V2.PHP

Méthode: Attribuer

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

Fichier: App / Code / Core / Mage / Catalogue / Modèle / Produit / Link / API / V2.PHP

Méthode: Mise à jour

$data->$attribute['code']

fichier: lib / varien / fichier / uploader.php

Méthode: _Validatefile

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

fichier: app / code / noyau / mage / noyau / modèle / layout.php

Méthode: GetOutput

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

En plus de l'autre les réponses liées à Magento 1:

PHP 7 incompatibilité Zend_XmlRpc_Server a été corrigé dans le Zend Framework 1.12.12

Toutes les versions avant CE 1.9.2.2 / EE 1.14.2.2 utiliser une ancienne version de Zend Framework, donc peuvent avoir des problèmes si vous utilisez le XML-RPC de l'API de Magento.

Vérifiez les fichiers de Pulloo qui sont modifiés en M1 compatibles avec PHP 7, ce sont des changements mineurs dans quelques fichiers, mais un travail intelligent de Pouchoo. https://github.com/inchoo/inchoo_php7/tree/ maître / application / code / local / pouce / php7

J'utilise Magento 2 Version 2.1.4 et fonctionne bien.

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);
}

La réponse courte est non, ce n'est pas le cas.Magento CE 1.9.2.4 ne prend en charge que PHP 5.4 et 5.5 officiellement.Et pendant que PHP 5.6 l'exécute juste bien, il sature des fichiers journaux avec des multitudes de messages d'avertissement.

Une réponse longue est qu'il est relativement facile de le modifier pour exécuter le support PHP7.Cependant, de nombreuses extensions ne sont toujours pas compatibles PHP7, vous êtes donc en grande partie par vous-même.

PHP 7.0 est en Fin de vie dès la première semaine de décembre 2018.

Comme de ce post, la version actuelle de Magento 2.2.3 (20 février 2018 libération) ne prend pas en charge le PHP 7.1, ou PHP 7.2.

Vous pouvez confirmer les versions prises en charge par la vérification de l' app/bootstrap.php dans votre dossier d'installation de Magento, et de chercher un code semblable au suivant:

/* 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);
}

Il semble aussi y avoir des problèmes dans .htaccess ce qui provoquer des erreurs 500 avec apache 2.4.

En outre, le compositeur fichier inclus ne contient que des dépendances pour php5.5

Licencié sous: CC-BY-SA avec attribution
Non affilié à magento.stackexchange
scroll top