Magento는 PHP 7을 지원합니까?


71

PHP 7은 베타 상태에 도달했으며 현재 많은 테스트가 진행되고 있습니다. 지난해 Magento가 "PHP 5.3에서만 실행"에서 "PHP 5.6과 완벽하게 호환 됨"에 이르기까지 Magento가 Magento 1.x 및 Magento 2에 대한 PHP 7 호환성을 얼마나 고려하고 있는지 알고 싶습니다.

Anna Filina 가 Magento 1.9.1 (1.9.2에서 변경되지 않음)에서 하나의 문제를 발견 한이 게시물을 찾았지만 Magento 1에 단위 테스트가없는 경우 이것이 유일한 문제라고 믿지 않습니다.

따라서 질문은 Magento 1에 대한 PHP 7 호환성이 보장됩니까? 그리고 Magento 2는 이미 PHP 7 (자동 테스트)에서 테스트되었으므로 알려진 문제가 있습니까?


방금 php7에서 magento 2.1.2를 사용해 보았습니다.
guru1

@ guru1 왜 정교한가? 내 경험상 잘 작동합니다.
Fabian Schmengler

@guru ... PHP 7의 magento 2.1.2에서 프로젝트를 개발 중입니다. 무슨 문제가 있습니까?
Jai

답변:



26

가장 최신 버전 인 M CE 1.9.2.2를 사용하는 경우 확장 기능이 있으므로 PHP 7과의 완벽한 호환성을 얻을 수 있습니다 : https://github.com/Inchoo/Inchoo_PHP7 . (면책 조항 : 나는 커뮤니티의 도움이 많이 있지만 저자입니다.)

또한 http://packages.firegento.com/의 Composer를 통해 설치할 수 있습니다.

여기에 언급 된 모든 비 호환성 문제가 해결되었습니다. 우리는 여전히 몇 가지 엣지 케이스가있을 수 있지만, 멈추지 않는 것은 없다고 생각합니다. 테스트, 문제보고 및 풀 요청을 환영합니다.


로컬 재정의를하는 것은 매우 나쁜 생각입니다 ...
MagenX

2
@MagenX 당신이 Inchoo하지 않고 당신이 무엇을하고 있는지 알지 못한다면;)
7ochem

우리 모두는 때때로 바보 같은 일을한다 .....
MagenX

2
로컬 재정의의 가장 큰 위험은 호환되지 않는 버전의 magento를 사용하는 것입니다. 저자의 견해로는 최신 magento 버전으로 최신 버전을 유지하는 것입니다. 그리고 이전 버전의 magento를 사용하고 있다면 PHP7을 사용하는 것이 좋습니다. 또한 맹목적으로 따르는 모범 사례도 멍청하기 때문에 "깨뜨릴"가치가있는 상황이 있습니다. 나는 그것이 "화물 숭배"접근법의 하나의 예일 뿐이라고 생각한다. Btw, extension is awesome :)
grizwako

내가 가진 유일한 문제는 개조를 지원하는 것입니다. 우리는 개조에 관해서 고객이 무엇을 사용하고 싶을 지 결코 모릅니다. PHP 7과 호환되도록 모든 개조를 테스트 / 업그레이드해야한다는 것은 악몽입니다.
Bill Garrison

21

PHP7에 대해서는 잘 모르지만 대부분의 내용이 PHP7에서 여전히 유효하다고 생각합니다. Matthias Geniar 의 블로그에서 자세한 정보를 찾을 수 있습니다

  • ext / mysql : 매우 오래된 MySQL 확장 임에도 불구하고 여전히 널리 사용되지만 모든 사람이 pdo_mysql로 ​​옮길 때라고 생각합니다.
  • set_magic_quotes_runtime그리고 magic_quotes_runtime: 나는 이후 로이 사용 중단 통지를 본 것 같습니다 ... 영원히?
  • iconv.input_encoding, iconv.output_encoding: 지금까지 나는 이것들에 대해 전혀 사용하지 못했습니다 ...
  • #ini 파일의 스타일 주석 : 일관성을위한 만세, 나는 항상 선호했습니다. .ini 파일의 (세미콜론) 주석!
  • preg_replace()eval modifier : 보안을 염두에 둔 시스템 관리자를위한 만세!

우리가 Magento에서 가질 수있는 유일한 것은 preg_replace()평가 수정 자 이지만 희망적으로는 아닙니다.

이 외에도 Magento는 1.9.2를 업데이트 된 TAF와 함께 제공했습니다. 이것으로 PHP7에서 수많은 프론트 엔드 테스트를 실행하고 나중에 로그를 검사 할 수 있어야합니다


1
Fabian의 견해에 따르면 테스트하는 가장 좋은 방법은 깨끗한 1.9.2 설치로 시작하고 샘플 데이터를로드 한 다음 TAF 테스트를 실행하는 것입니다. 의심 할 여지없이 오류를 발생 시키거나 중단시키는 것들이있을 수 있으며, 타사 확장 기능 및 설치에 추가 한 사용자 정의를 추가 할 때 더 많은 기능이 제공 될 수 있습니다. Zend는 PHP 7 릴리스에서 Magento를 테스트하고 있었지만, 사소한 문제가 많지 않더라도 중요한 문제가 있다면 놀랐습니다. 재고 1.9.2는 테스트를 시작하는 곳입니다.
Bryan 'BJ'Hoffpauir Jr.

좋은 설명 Fabian..thx
Amit Bera

2
나는 PHP7 베타에서 Magento 1.9CE를 테스트 해 왔는데, 그것은 관리자 패널에 큰 차이를 만듭니다 ... 카탈로그 작업 등은 너무 빠릅니다. 3000 제품 저장소에서 카탈로그 목록 관리 페이지는 12 초로드 (php5-fpm)에서 3.5 초 (php7-fpm)로 변경되었습니다. 우리는 이것을 프로덕션 환경에서 사용하고 싶어하므로 nginx를 사용하여 php7을 통해 관리자 URL 트래픽을 라우팅하고 지금은 php5-fpm에서 전면 트래픽을 유지하고 있습니다. , php7 릴리스에 대한 흥분 :)하지만
리키 오딘 매튜스

@RickyOdinMatthews 이것은 어떻게 당신을 위해 작동합니까? 여전히 PHP7에서만 관리자를 실행하고 있습니까? 어떤 문제가 있습니까? 관리자를 php7로 라우팅하는 NGINX 설정의 일부를 공유 할 수 있습니까?
Ottonet

1
@Ottonet 예, 여전히 관리자에서 사용하고 있습니다. 나는 당신을 위해 여기에 '기본'conf 추출을 넣었습니다 pastebin.com/9z1U94ug
Ricky Odin Matthews

13

Magento 1에 대한 의견은 없지만 Magento 2에는 "String"과 같은 클래스 이름에 문제가있었습니다. 수정하는 데 시간이 오래 걸리지 않았지만 기본적으로 작동하지 않았습니다. Magento 2는 수정 될 것으로 예상되지만 다른 우선 순위로 인해 아직 수정되지 않았을 수 있습니다.


1
정보를위한 Thans Alan. 참고로, 이것은 Github 이슈입니다 : github.com/magento/magento2/issues/1367 (여전히 "object"와 같은 다른 예약어들)
Fabian Schmengler

3
현재 상태 : 개발 지점에서 수정 된 클래스 이름, 더 이상 알려진 문제
Fabian Schmengler

10

거의 준비되었습니다. PHP 7 RC1으로 깨끗한 Magento 1.9.2.1을 실행하려고 시도했는데 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.

누군가 솔루션에 관심이 있다면 여기 에서 찾을 수 있습니다 .


1
물론 누군가 솔루션에 관심이 있습니다 ;-) 링크 된 기사의 내용을 요약 할 수 있습니까? 블로그를 추가 정보와 연결하는 데 아무런 문제가 없지만 답변은 독자적으로 설 수 있습니다.
Fabian Schmengler

글쎄, 문제는 Magento가 PHP 7을 사용할 준비가되었는지 여부입니다. 어쨌든, 나는 간단한 해결책으로 대답을 업데이트했습니다.
Zsolti

1
유사한 오류가 발생 Varien_File_Uploader, 참조 magento.stackexchange.com/questions/93066/...
파비안 Schmengler

1.9.2.4와 동일
lrkwz

8

Magento2는 PHP 7을 사용할 준비가되었습니다. PHP7에 대한 코드 적응이 완료되었으며 모든 변경 사항은 개발 지점에서 사용할 수 있습니다. GitHub 관련 문제보기

또한 Magento1에서 PHP 7을 지원하려면 이전 버전과 호환되지 않는 변경이 필요하며 공식적으로 지원되지 않을 것이라고 생각합니다.


M2와 PHP 7이 같은 달-2015 년 11 월에 출시 될 것입니다.
FireBear

7

마 젠토가 주문 총계를 계산하고 할인을 적용하는 방법에 문제가 있습니다. 또한 광고 항목이 총계에 합산되지 않으므로 Paypal Express 결제가 중지됩니다.

문제는 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;
}

훌륭해, 내 이상 + 20 % 세금이 총액에 올랐다.
evensis

6

이것은 magento php7 비 호환성에 대해 당신과 공유하고 싶은 나의 연구입니다. 현재 균일 한 변수 구문으로 인해 코드가 실패 해야하는 곳을 찾았습니다.

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

메소드 : overrideAttribute

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

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

메소드 : filterAttributeCollection

$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

메소드 : getOutput

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

5

마 젠토 1과 관련된 다른 답변 외에도 :

Zend_XmlRpc_ServerZend Framework 1.12.12에서 PHP 7 비 호환성 이 수정되었습니다.

CE 1.9.2.2 / EE 1.14.2.2 이전의 모든 버전은 이전 버전의 Zend Framework를 사용하므로 Magento의 XML-RPC API를 사용하면 문제가 발생할 수 있습니다.



1

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

1

짧은 대답은 아니요, 그렇지 않습니다. Magento CE 1.9.2.4는 공식적으로 PHP 5.4 및 5.5 만 지원합니다. 그리고 PHP 5.6은 잘 동작하지만 많은 경고 메시지로 로그 파일을 포화시킵니다.

긴 대답은 PHP7을 지원하도록 수정하는 것이 상대적으로 쉽다는 것입니다. 그러나 많은 확장 프로그램은 여전히 ​​PHP7과 호환되지 않으므로 대부분 독자적인 기능입니다.


0

PHP 7.0은 2018 년 12 월 첫 주부터 끝났습니다.

이 게시물을 기준으로 현재 버전의 Magento 2.2.3 (2018 년 2 월 20 일 릴리스)은 PHP 7.1 또는 PHP 7.2를 지원하지 않습니다.

app/bootstrap.phpMagento 설치 폴더 를 체크인하여 지원되는 버전을 확인 하고 다음과 유사한 코드를 찾을 수 있습니다.

/* 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아파치 2.4에서 500 오류가 발생하는 문제도있는 것 같습니다 .

또한, 포함 된 composer 파일은 php5.5에 대한 의존성 만 포함합니다

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.