Pregunta

PHP 7 está alcanzando el estado beta y en este momento se están realizando muchas pruebas.Dado que Magento pasó de "se ejecuta sólo en PHP 5.3" a "totalmente compatible con PHP 5.6" en el último año, me gustaría saber cuánto están considerando la compatibilidad de PHP 7 para Magento 1.x y Magento 2.

encontré esta publicación de Anna Filina donde encontró un problema en Magento 1.9.1 (aún sin cambios en 1.9.2), pero dado que Magento 1 no tiene pruebas unitarias, no confío en que este sea el único problema.

Entonces la pregunta es:¿Se garantizará la compatibilidad de PHP 7 con Magento 1?Y como Magento 2 probablemente ya se haya probado en PHP 7 (¡gracias a las pruebas automatizadas!), ¿hay algún problema conocido?

¿Fue útil?

Solución

Magento anunció oficialmente el 20 de enero de 2016, que CE y EE 2.0.1 apoyan oficialmente PHP 7.0.2.

Magento Enterprise Edition y Community Edition 2.0.1 son ahora Disponible y caracterice actualizaciones importantes y actualizaciones funcionales, incluido el apoyo oficial para PHP7.0.2.

enlace: https://magento.com/blog/technical/new-Magento-20-Resources-and-Support-PHP7

Otros consejos

Si está utilizando la versión más reciente, M CE 1.9.2.2, hay una extensión que lo llevará a la compatibilidad completa de PHP 7: >https://github.com/inchoo/inchoo_php7 .(Descargo de responsabilidad: Soy el autor, aunque hay mucha ayuda de la comunidad.)

También está instalable a través del compositor de http://packages.firegento.com/ .

Todas las incompatibilidades mencionadas aquí son fijas.Pensamos que aún puede haber algunos casos de borde, pero nada se detiene.Las pruebas, la emisión de informes y las solicitudes de tracción son bienvenidas.

No tengo idea de PHP7, pero supongo que la mayoría de las cosas sigue siendo válida en PHP7, puede encontrar más información en el blog de Matthias geniar

  • ext / mysql: a pesar de ser una extensión muy antigua de MySQL, creo que todavía se usa muy ampliamente, pero es el momento en que todos se mudaron a PDO_MYSQL.
  • set_magic_quotes_runtime y magic_quotes_runtime: parece que he visto estos avisos de deprecación desde ... para siempre?
  • iconv.input_encoding, iconv.output_encoding: hasta ahora, nunca he tenido un uso para estos ...
  • # Style Comentarios en archivos INI: Hooray por consistencia, siempre he preferido; (punto y coma) comentarios en .ini archivos!
  • preg_replace() Eval Modificador: Hooray para Sysadmins de mente de seguridad!

Creo que lo único que podríamos tener en Magento es preg_replace() eval modificador pero espero que no.

Además de esto, Magento envió 1.9.2 con un TAF actualizado, puedes encontrar en Dev. Con esto, debe poder ejecutar un montón de pruebas Frontend en PHP7 y examinar el registro después

No hay comentarios sobre Magento 1, pero Magento 2 tuvo algunos problemas con los nombres de las clases como "cadena".No tardó mucho en arreglarlo, pero no funcionó fuera de la caja.Espero que Magento 2 sea fijo, pero podría no ser arreglado aún debido a otras prioridades primero.

Está casi listo.Intenté ejecutar Magento 1.9.2.1 limpio con PHP 7 RC1, lo que resultó en una falla instantánea (error fatal) de Magento.Después de solucionar este problema, todo parecía estar funcionando, excepto el backend, en el que no pude iniciar sesión.Más tarde resultó ser un problema relacionado con la sesión que se puede solucionar.

Brevemente:

  1. El error fatal se puede solucionar anulando Mage_Core_Model_Layout luego cambiando la línea 555 de:
    $out .= $this->getBlock($callback[0])->$callback[1]();
    en
    $out .= $this->getBlock($callback[0])->{$callback[1]}();

  2. El problema de la sesión se puede solucionar temporalmente anulando Mage_Core_Model_Session_Abstract_Varien y reescribiendo el getData, setData, unsetData, addFullNames métodos, por lo que en todas partes donde $this->_data fue usado, será reemplazado por $_SESSION.

Si alguien está interesado en la solución, puede encontrarla. aquí.

Magento2 está listo para PHP 7. La adaptación del código a PHP7 se realizó y todos los cambios están disponibles en la rama de desarrollo.Consulte el problema en github

Además, el apoyo de PHP 7 en Magento1 requiere cambios incompatibles hacia atrás y creo que no será compatible oficialmente.

Hay un problema con la forma en que Magento calcula el total general del pedido y aplica los descuentos.Esto también detiene el pago exprés de Paypal, ya que los artículos de línea no se suman al total general con el descuento.

El problema parece ser que el Mage_Sales_Model_Config_Ordered::_compareTotals() no funciona igual en PHP7 que PHP5, y uasort() ahora depende de la relación transitiva para el pedido, pero no tiene por qué ser así para los totales de los pedidos.

Intenta usar: -

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

Esta es mi investigación, quiero compartir con usted sobre las incompatibilidades Magento PHP7. Actualmente he encontrado algunos lugares donde el código debe fallar debido a una sintaxis variable uniforme.

Archivo: Aplicación / código / núcleo / mago / ImportExport / Modelo / Exportación / Entidad / Producto / Tipo / Resumen.php

MÉTODO: OverRiderEatTribe

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

Archivo: Aplicación / código / núcleo / mago / ImportExport / Modelo / Exportar / Entidad / Cliente.php

MÉTODO: FiltroTtributeCollection

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

Archivo: APP / CÓDIGO / CORE / CORE / MAGE / ImportExport / Modelo / Importar / uploader.php

Método: _validatefile

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

Archivo: Aplicación / código / núcleo / mago / Catálogo / Modelo / producto / enlace / API / V2.PHP

Método: Asignar

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

Archivo: Aplicación / código / núcleo / mago / Catálogo / Modelo / producto / enlace / API / V2.PHP

Método: Actualización

$data->$attribute['code']

Archivo: lib / varien / archivo / uploader.php

Método: _validatefile

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

Archivo: Aplicación / código / núcleo / mago / núcleo / modelo / diseño.php

Método: GetOutput

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

Además de las otras respuestas relacionadas con Magento 1:

Una incompatibilidad PHP 7 en Zend_XmlRpc_Server se ha fijado en Zend Framework 1.12.12

Todas las versiones anteriores CE 1.9.2.2 / EE 1.14.2.2 Use una versión anterior de Zend Framework, podría tener problemas si utiliza la API XML-RPC de Magento.

Revise los archivos de Incencione, que se cambian para hacer M1 compatible con PHP 7, esos son cambios menores en pocos archivos, pero el trabajo inteligente de FiCoo. https://github.com/inchoo/inchoo_php7/tree/ Master / Aplicación / Código / Local / Inchoo / PHP7

Estoy usando Magento 2 CE versión 2.1.4 y funciona 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 respuesta corta es no, no lo hace.Magento CE 1.9.2.4 solo admite PHP 5.4 y 5.5 oficialmente.Y mientras que PHP 5.6 lo ejecuta, satura los archivos de registro con multitudes de mensajes de advertencia.

Respuesta larga es que es relativamente fácil modificarlo para ejecutar Soporte PHP7.Sin embargo, muchas extensiones aún no son compatibles con PHP7, por lo que está en gran parte por su cuenta.

PHP 7.0 finaliza su vida útil a partir de la primera semana de diciembre de 2018.

A partir de esta publicación, la versión actual de Magento 2.2.3 (versión del 20 de febrero de 2018) no es compatible con PHP 7.1 ni PHP 7.2.

Puede confirmar las versiones compatibles marcando app/bootstrap.php en su carpeta de instalación de Magento y busque un código similar al siguiente:

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

También parece haber problemas en .htaccess que causan 500 errores con Apache 2.4.

Además, el archivo de composición incluido solo contiene dependencias para php5.5.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a magento.stackexchange
scroll top