Pergunta

O PHP 7 está atingindo o status beta e muitos testes estão acontecendo no momento.Dado que o Magento passou de "roda apenas em PHP 5.3" para "totalmente compatível com PHP 5.6" no ano passado, gostaria de saber o quanto eles estão considerando a compatibilidade do PHP 7 para Magento 1.x e Magento 2.

eu encontrei esta postagem de Anna Filina onde ela encontrou um problema no Magento 1.9.1 (ainda inalterado no 1.9.2), mas como o Magento 1 não possui testes unitários, não confio que esse tenha sido o único problema.

Então a questão é:a compatibilidade do PHP 7 para Magento 1 será garantida?E como o Magento 2 provavelmente já foi testado no PHP 7 (graças aos testes automatizados!), Existe algum problema conhecido?

Foi útil?

Solução

magento anunciou oficialmente em 20 de janeiro de 2016, que CE e EE 2.0.1 suportam oficialmente PHP 7.0.2.

.

Magento Enterprise Edition e Community Edition 2.0.1 são agora Disponível e apresenta uma importante segurança e atualizações funcionais, incluindo suporte oficial para PHP7.0.2.

link: https://magento.com/blog/techicical/new-magento-20-recursos-e-support-php7

Outras dicas

Se você estiver usando a versão mais recente, m CE 1.9.2.2, há uma extensão que trará para a compatibilidade de PHP 7 completa: https://github.com/inchoo/inchoo_php7 .(Disclaimer: Eu sou o autor, embora haja muita ajuda da comunidade.)

Também é instalado através do compositor de http://packages.firegento.com/ .

Todas as incompatibilidades mencionadas aqui são fixas.Achamos que ainda pode haver alguns casos de borda, mas nada a parada.Testes, emitir solicitações de relatórios e pull são bem-vindos.

Não faço ideia sobre o PHP7, mas acho que a maior parte do material ainda é válido no PHP7, você pode encontrar mais informações no blog do Matthias Geniar

  • ext/mysql: apesar de ser uma extensão muito antiga do MySQL, eu acho que ainda é muito usada, mas é hora de todos migrarem para o pdo_mysql.
  • set_magic_quotes_runtime e magic_quotes_runtime: parece que vi esses avisos de depreciação desde ...para sempre?
  • iconv.input_encoding, iconv.output_encoding: até agora nunca usei isso...
  • # comentários de estilo em arquivos ini: viva pela consistência, sempre preferi;(ponto e vírgula) comentários em arquivos .ini!
  • preg_replace() modificador de avaliação: viva para administradores de sistemas preocupados com a segurança!

Acho que a única coisa que podemos ter no Magento é preg_replace() modificador de avaliação mas espero que não.

Além disso, o Magento lançou o 1.9.2 com um TAF atualizado, que você pode encontrar em dev.Com isso você poderá executar vários testes de frontend no PHP7 e examinar o log depois

Nenhum comentário no Magento 1, mas Magento 2 teve alguns problemas com nomes de classes como "string".Não demorou muito para consertar, mas não funcionou fora da caixa.Espero que o Magento 2 seja corrigido, mas pode não ser corrigido ainda devido a outras prioridades primeiro.

Está quase pronto.Tentei executar um Magento 1.9.2.1 limpo com PHP 7 RC1, o que resultou em uma falha instantânea (erro fatal) do Magento.Depois de corrigir esse problema, tudo parecia estar funcionando, exceto o backend, no qual não consegui fazer login.Mais tarde, descobriu-se que era um problema relacionado à sessão que pode ser corrigido.

Brevemente:

  1. O erro fatal pode ser corrigido substituindo Mage_Core_Model_Layout então mudando a linha 555 de:
    $out .= $this->getBlock($callback[0])->$callback[1]();
    em
    $out .= $this->getBlock($callback[0])->{$callback[1]}();

  2. O problema da sessão pode ser corrigido temporariamente substituindo Mage_Core_Model_Session_Abstract_Varien e reescrevendo o getData, setData, unsetData, addFullNames métodos, então em todos os lugares onde $this->_data foi usado, ele será substituído por $_SESSION.

Se alguém estiver interessado na solução, ela pode ser encontrada aqui.

magento2 está pronto para o PHP 7. A adaptação do código ao PHP7 foi feita e todas as alterações estão disponíveis no Ramo Desenvolvimento.Veja o problema em github

Além disso, o apoio do PHP 7 no Magento1 requer alterações incompatíveis para trás e acho que não será suportado oficialmente.

Há um problema em como o Magento calcula o total geral do pedido e aplica os descontos.Isso também interrompe o checkout expresso do Paypal, pois os itens de linha não somam o total geral com o desconto.

O problema parece ser que o Mage_Sales_Model_Config_Ordered::_compareTotals() não está funcionando da mesma forma no PHP7 e no PHP5, e uasort() agora depende do relacionamento transitivo para o pedido, mas isso não precisa ser para os totais dos pedidos.

Tente 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 é minha pesquisa que quero compartilhar com vocês sobre as incompatibilidades do magento php7.Atualmente encontrei alguns lugares onde o código deve falhar devido à sintaxe uniforme das variáveis.

Arquivo:app/code/core/Mage/ImportExport/Model/Export/Entity/Product/Type/Abstract.php

Método:substituirAtributo

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

Arquivo:app/code/core/Mage/ImportExport/Model/Export/Entity/Customer.php

Método:filterAttributeCollection

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

Arquivo:app/code/core/Mage/ImportExport/Model/Import/Uploader.php

Método:_validarArquivo

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

Arquivo:app/code/core/Mage/Catalog/Model/Product/Link/Api/V2.php

Método:atribuir

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

Arquivo:app/code/core/Mage/Catalog/Model/Product/Link/Api/V2.php

Método:atualizar

$data->$attribute['code']

Arquivo:lib/Varien/File/Uploader.php

Método:_validarArquivo

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

Arquivo:app/code/core/Mage/Core/Model/Layout.php

Método:obter saída

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

Além das outras respostas relacionadas com Magento 1:

A incompatibilidade do PHP 7 no Zend_XmlRpc_Server foi corrigido no Zend Framework 1.12.12

Todas as versões anteriores CE 1.9.2.2.2.2.2.2 Use uma versão mais antiga do Zend Framework, talvez tenha problemas se você usar a API XML-RPC do Magento.

Verifique os arquivos do ICCOO que são alterados para M1 compatível com o PHP 7, essas são menores alterações em poucos arquivos, mas o trabalho inteligente de Incheco. https://github.com/inchoo/inchoo_php7/tree/ mestre / app / código / local / iao / php7

Estou usando o Magento 2 CE versão 2.1.4 e funciona bem.

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

Resposta curta é não, não.O Magento CE 1.9.2.4 só suporta o PHP 5.4 e 5.5 oficialmente.E enquanto o PHP 5.6 corre bem, ele satura arquivos de log com multidões de aviso.

Longa resposta é que é relativamente fácil modificá-lo para executar o suporte de suporte.No entanto, muitas extensões ainda não são compatíveis com PHP7, então você é em grande parte por conta própria.

O PHP 7.0 está em fim de vida na primeira semana de dezembro de 2018.

A partir desta postagem, a versão atual do Magento 2.2.3 (versão de 20 de fevereiro de 2018) não oferece suporte a PHP 7.1 ou PHP 7.2.

Você pode confirmar as versões suportadas verificando app/bootstrap.php na pasta de instalação do Magento e procure um código semelhante ao seguinte:

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

Também parece haver problemas .htaccess que causam 500 erros com o Apache 2.4.

Além disso, o arquivo compositor incluído contém apenas dependências para php5.5

Licenciado em: CC-BY-SA com atribuição
Não afiliado a magento.stackexchange
scroll top