Вопрос

PHP 7 достигает статуса бета-версии, и в настоящее время проводится множество тестов.Учитывая, что за последний год Magento перешел от «работает только на PHP 5.3» к «полностью совместимому с PHP 5.6», мне хотелось бы знать, насколько они рассматривают возможность совместимости PHP 7 для Magento 1.x, а также для Magento 2.

я нашел этот пост Анны Филиной где она нашла одну проблему в Magento 1.9.1 (все еще не измененная в 1.9.2), но, учитывая, что в Magento 1 нет модульных тестов, я не верю, что это была единственная проблема.

Итак, вопрос:будет ли обеспечена совместимость PHP 7 с Magento 1?И поскольку Magento 2, вероятно, уже был протестирован на PHP 7 (спасибо автоматическим тестам!), есть ли какие-либо известные проблемы?

Это было полезно?

Решение

Magento официально объявлено 20 января 2016 года, что CE и EE 2.0.1 официально поддерживают PHP 7.0.2.

Magento Enterprise Edition и Community Edition 2.0.1 сейчас Доступны и имеют важные функциональные обновления, в том числе официальная поддержка PHP7.0.2.

Ссылка: https://magento.com/blog/technal/new-Магенто-20-ресурсы-и-поддержка-PHP7

Другие советы

Если вы используете самую последнюю версию, M CE 1.9.2.2, существует расширение, которое принесет его на совместимость PHP 7: https://github.com/inchoo/inchoo_php7 .(Отказ от ответственности: Я автор, хотя есть большая помощь от сообщества.)

Это также устанавливается через композитор из http://packages.firegento.com/ .

Все несовместимость, упомянутые здесь, исправлены.Мы думаем, что все еще могут быть несколькими краевыми случаями, но ничего не прекращают.Тестирование, отчетность о проблемах и запросах по тяги приветствуются.

Понятия не имею о PHP7, но предполагаю, что большая часть материала по-прежнему актуальна и в PHP7. Дополнительную информацию можно найти в блоге. Матиас Женьяр

  • доб/mysql: несмотря на то, что это очень старое расширение MySQL, я считаю, что оно все еще очень широко используется, но пришло время всем перейти на pdo_mysql.
  • set_magic_quotes_runtime и magic_quotes_runtime: кажется, я видел эти уведомления об устаревании с тех пор...навсегда?
  • iconv.input_encoding, iconv.output_encoding: до сих пор мне они ни разу не пригодились...
  • # комментарии к стилям в ini-файлах: ура последовательности, я всегда предпочитал ;(точка с запятой) в файлах .ini!
  • preg_replace() модификатор оценки: ура системным администраторам, заботящимся о безопасности!

Я думаю, единственное, что у нас может быть в Magento, это preg_replace() модификатор оценки но надеюсь, что нет.

Кроме того, Magento выпустила версию 1.9.2 с обновленным TAF, который вы можете найти в dev.Благодаря этому вы сможете запустить несколько тестов внешнего интерфейса на PHP7 и впоследствии просмотреть журнал.

Нет комментариев на Magento 1, но Magento 2 имел некоторые проблемы с именами классов, таких как «String».Это не заняло много времени, чтобы исправить, но он не работал из коробки.Я ожидаю, что Magento 2 будет исправлено, но он может не исправить, но из-за других приоритетов первым.

Оно почти готово.Я попытался запустить чистый Magento 1.9.2.1 с PHP 7 RC1, что привело к мгновенному сбою (фатальной ошибке) Magento.После устранения этой проблемы все, казалось, работало, кроме серверной части, в которую я не смог войти.Позже выяснилось, что это проблема, связанная с сеансом, которую можно исправить.

Кратко:

  1. Фатальную ошибку можно исправить, переопределив Mage_Core_Model_Layout затем изменим строку 555 с:
    $out .= $this->getBlock($callback[0])->$callback[1]();
    в
    $out .= $this->getBlock($callback[0])->{$callback[1]}();

  2. Проблему сеанса временно можно устранить, переопределив Mage_Core_Model_Session_Abstract_Varien и переписывание getData, setData, unsetData, addFullNames методы, поэтому везде, где $this->_data использовался, он будет заменен на $_SESSION.

Если кого-то заинтересует решение, его можно найти здесь.

Magento2 готов к PHP 7. Адаптация кода до PHP7 была сделана, и все изменения доступны в разрабатывающей ветке.См. Проблема на github

также, поддержка PHP 7 в Magento1 требует обратных несовместимых изменений, и я думаю, что будет официально не поддерживаться.

Существует проблема с тем, как Magento рассчитывает общую сумму заказа и применяет скидки.Это также останавливает экспресс-оформление заказа Paypal, поскольку позиции не суммируются с общей суммой со скидкой.

Кажется, проблема в том, что Mage_Sales_Model_Config_Ordered::_compareTotals() не работает в PHP7 так же, как PHP5, и uasort() теперь полагается на транзитивные отношения для упорядочивания, но это не обязательно должно относиться к итоговым суммам заказов.

Попробуйте использовать: -

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

Это мое исследование, которым я хочу поделиться с вами о несовместимости magento с php7.В настоящее время я нашел несколько мест, где код должен завершаться сбоем из-за единообразного синтаксиса переменных.

Файл:app/code/core/Mage/ImportExport/Model/Export/Entity/Product/Type/Abstract.php

Способ:Переопределить атрибут

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

Файл:app/code/core/Mage/ImportExport/Model/Export/Entity/Customer.php

Способ:Коллекция атрибутов фильтра

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

Файл:app/code/core/Mage/ImportExport/Model/Import/Uploader.php

Способ:_validateFile _значимый файл

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

Файл:app/code/core/Mage/Catalog/Model/Product/Link/Api/V2.php

Способ:назначить

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

Файл:app/code/core/Mage/Catalog/Model/Product/Link/Api/V2.php

Способ:Обновить

$data->$attribute['code']

Файл:lib/Varien/File/Uploader.php

Способ:_validateFile _значимый файл

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

Файл:app/code/core/Mage/Core/Model/Layout.php

Способ:Получение результата

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

В дополнение к другим ответам, связанным с Magento 1:

Несовместимость PHP 7 в Zend_XmlRpc_Server исправлено в Zend Framework 1.12.12.

Все версии до CE 1.9.2.2 / EE 1.14.2.2 используют более старую версию Zend Framework, поэтому могут возникнуть проблемы, если вы используете XML-RPC API Magento.

Проверьте файлы из DICKOO, которые изменяются для выполненного M1, совместимы с PHP 7, это незначительные изменения в нескольких файлах, но интеллектуальные работы от Inchoo. https://github.com/inchoo/inchoo_php7/tree/ master / app / code / local / dichoo / php7

Я использую Magento 2 CE версию 2.1.4 и работает нормально.

<Сильное> 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);
}
.

Краткий ответ Нет, это не так.Magento Ce 1.9.2.4 поддерживает только PHP 5.4 и 5,5.И во время PHP 5,6 запускается все нормально, он насыщает файлы журналов множеством предупреждающих сообщений.

Долгий ответ - это относительно легко изменить его, чтобы запустить поддержку PHP7.Однако многие расширения все еще не являются PHP7, совместимыми, поэтому вы в значительной степени самостоятельно.

Срок эксплуатации PHP 7.0 истекает в первую неделю декабря 2018 года.

На момент написания этой статьи текущая версия Magento 2.2.3 (выпуск от 20 февраля 2018 г.) не поддерживает PHP 7.1 или PHP 7.2.

Вы можете подтвердить поддерживаемые версии, проверив app/bootstrap.php в папке установки Magento и найдите код, похожий на следующий:

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

Кажется, также есть проблемы в .htaccess которые вызывают 500 ошибок с Apache 2.4.

Кроме того, включенный файл композитора содержит только зависимости для php5.5.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с magento.stackexchange
scroll top