Magento PHP 7 için hazır mı?


71

PHP 7 beta durumuna ulaşıyor ve şu anda pek çok test devam ediyor. Magento'nun geçen yıl içinde "yalnızca PHP 5.3'te çalışır" dan "PHP 5.6 ile tamamen uyumlu" den yakalandığını göz önüne alındığında, Magento 1.x ve Magento 2 için PHP 7 uyumluluğu ne kadarını düşündüklerini bilmek isterim.

Buldum Anna Filina tarafından bu yazı o Magento 1.9.1 (hala değişmemiş 1.9.2 olarak) bir sorunu buldum ama Magento 1 Bu tek sorun olduğunu güvenmiyorum, birim testleri sahip olmadığını verilmiş.

Öyleyse soru şudur: Magento 1 için PHP 7 uyumluluğu sağlanacak mı? Ve Magento 2 muhtemelen zaten PHP 7'de test edilmiştir (Otomatik testler!), Bilinen bir sorun var mı?


Az önce php7'deki magento 2.1.2'yi denedim ve bir sorun yok.
guru1

@ guru1 Neden hazırlayabilir misiniz? Benim tecrübeme göre, iyi çalışıyor.
Fabian Schmengler,

@guru ... Projemi magento 2.1.2'de php 7 ve iyi sonuç için geliştiriyorum. Ne sorunu yaşıyorsun?
Jai,

Yanıtlar:



26

En son sürümü olan M CE 1.9.2.2 kullanıyorsanız, PHP 7'nin tam uyumluluğuna getirecek bir uzantı vardır: https://github.com/Inchoo/Inchoo_PHP7 . (Feragatname: Topluluğun çok yardımı olmasına rağmen, ben yazarım.)

Ayrıca http://packages.firegento.com/ adresinden Besteci ile yüklenebilir .

Burada belirtilen tüm uyumsuzluklar sabittir. Hala bazı son vakalar olabileceğini düşünüyoruz, ancak hiçbir şeyin durmadığını gösteriyor. Test etme, sorun bildirme ve çekme istekleri kabul edilir.


bazı yerel geçersiz kılmaları koymak çok kötü bir fikirdir ...
MagenX

2
Inchoo olmadıkça ve ne yaptığını
bilmedikçe @MagenX

hepimiz aptalca şeyler yaparız, zaman zaman .....
MagenX

2
Yerel geçersiz kılma riskindeki en büyük risk, onları magento'nun uyumsuz versiyonuyla kullanmak, yazarın görünümünden en yeni magento versiyonuyla güncel tutmaya devam etmek. Magento'nun eski sürümünde iseniz, PHP7 ile oynamak ... Ayrıca, en iyi uygulamaları körü körüne takip etmek de aptalca, "kırmak" için de buna değer durumlar var. Bunun "kargo kültü" yaklaşımına bir örnek daha olduğunu düşünüyorum. Btw, uzatma harika :)
grizwako

Burada sahip olduğum tek sorun mods desteği. Müşterilerimizin mods olduğunda ne kullanmak istediklerini asla bilemeyiz ve her modun php 7 uyumlu olması için test edilmesi / yükseltilmesi bir kabustur.
Bill Garrison

21

PHP7 hakkında hiçbir fikrim yok, ancak PHP7’de çoğu şeyin hala geçerli olduğunu tahmin ediyorum, Matthias Geniar’ın blogunda daha fazla bilgi bulabilirsiniz.

  • ext / mysql: çok eski bir MySQL uzantısı olmasına rağmen, hala çok yaygın kullanıldığını sanıyorum ama herkesin pdo_mysql'e taşınmasının zamanı geldi.
  • set_magic_quotes_runtimeve magic_quotes_runtime: Görünüşe göre sonsuza dek bu gizlilik bildirimlerini görmüştüm.
  • iconv.input_encoding, iconv.output_encoding: Şimdiye kadar, bunlar için hiç kullanmadım ...
  • #ini dosyalarına stil yorum: tutarlılık için yaşasın, ben her zaman tercih ettim; (noktalı virgül) .ini dosyalarına yorumlar!
  • preg_replace()eval değiştirici: güvenlik fikirli sistem yöneticileri için yaşasın!

Bence Magento'da olabileceğimiz tek şey preg_replace()eval değiştirici ama umarım değil.

Bunun yanı sıra, Magento 1.9.2'yi güncellenmiş bir TSK ile birlikte teslim etti, dev. Bununla PHP7'de bir grup ön test çalıştırabilir ve daha sonra günlüğü inceleyebilirsiniz.


1
Fabian'ın noktasını yinelemek için test etmek için en iyi bahis, temiz bir 1.9.2 kurulumuyla başlamak, örnek verileri yüklemek ve ardından TAF testlerini çalıştırmaktır. Kuşkusuz, hataya yol açan veya bozan bazı şeyler olacak ve muhtemelen üçüncü taraf uzantılarını ve kurulumunuza ekleyebileceğiniz özelleştirmeleri eklemeye başladığınızda daha da fazlası olacaktır. Zend, Magento'yu PHP 7 sürümünde test ediyordu ve HERHANGİ BİR sorun olsaydı, ÇOK küçük sorunlar olmasa da şaşırırdım. Stok 1.9.2 .... test başlangıç noktasıdır
Bryan 'BJ' Hoffpauir Jr.

İyi açıklama Fabian ... thx
Amit Bera

2
Magento 1.9CE'yi php7 beta'da test ettim, yönetici paneli için çok büyük bir fark yaratıyor ... Katalog görevleri vb. Çok hızlı. Bir 3000 ürün mağazasında, katalog listesi yönetici sayfası 12s'den (php5-fpm) 3.5s'e (php7-fpm) geçmiştir. Bunu üretimde kullanmak istiyoruz, bu yüzden şu anda php7 üzerinden yönetici URL trafiğini yönlendirmek için nginx kullanıyorum ve şimdilik php5-fpm'de öndeki trafiği koruyorum. Olsa da, php7 sürümü için heyecanlı :)
Ricky Odin Matthews

@ RickyOdinMatthews Bu sizin için nasıl çalışıyor? Hala sadece php7'de yönetici çalışıyor mu? Herhangi bir sorun? NGINX config'in admin'i php7'ye yönlendiren kısmını paylaşabilir misiniz?
Ottonet

1
@Ottonet evet, hala yönetici üzerinde kullanıyor. 'Varsayılan' conf özümü buraya sizin için koydum pastebin.com/9z1U94ug
Ricky Odin Matthews

13

Magento 1 hakkında yorum yok, ancak Magento 2 "String" gibi sınıf isimlerinde bazı problemler yaşadı. Düzeltilmesi uzun sürmedi, ancak kutunun dışında çalışmadı. Magento 2'nin düzeltilmesini bekliyorum, ancak ilk önce diğer öncelikler nedeniyle henüz düzeltilmeyebilir.


1
Bilgi için Alan'a Thans. Başvuru için, bu Github konusudur: github.com/magento/magento2/issues/1367 (hala göründüğü gibi "nesne" gibi diğer ayrılmış kelimeler)
Fabian Schmengler 14:15

3
Şu anki durum:
Gelişim

10

Neredeyse hazır. PHP 7 RC1 ile temiz bir Magento 1.9.2.1 çalıştırmayı denedim, bu da Magento'nun anında çökmesine (ölümcül hata) neden oldu. Bu sorunu düzelttikten sonra, giriş yapamadığım arka uç dışında her şey çalışıyor gibiydi. Daha sonra yamayla ilgili oturumla ilgili bir sorun olduğu ortaya çıktı.

Kısaca:

  1. Önemli bir hata geçersiz ile tespit edilebilir Mage_Core_Model_Layout, sonra bir satır 555 değiştirme:
    $out .= $this->getBlock($callback[0])->$callback[1]();
    içine
    $out .= $this->getBlock($callback[0])->{$callback[1]}();

  2. Oturumu sorunu geçici olarak geçersiz kılarak sabitlenebilir Mage_Core_Model_Session_Abstract_Varienve yeniden yazma getData, setData, unsetData, addFullNamesnerede yöntemleri, bu yüzden her yerde $this->_datakullanıldı, bunun yerini alacaktır $_SESSION.

Çözümle ilgilenen biri varsa, burada bulunabilir .


1
Tabii ki birisi çözümle ilgileniyor ;-) Bağlantılı makalenin içeriğini özetleyebilir misiniz? Blogunuzu ek bilgilerle ilişkilendirmenin yanlış bir tarafı yoktur, ancak cevap kendi başına durabilmelidir.
Fabian Schmengler

Peki, soru Magento'nun PHP 7 için hazır olup olmadığı, nasıl bir arada çalışacakları hakkında değildi. Her neyse, cevabımı kısa bir çözümle güncelledim.
Zsolti

1
Benzer bir hata oluşur Varien_File_Uploader, bkz. Magento.stackexchange.com/questions/93066/…
Fabian Schmengler

1.9.2.4 için aynı
lrkwz

8

Magento2 PHP 7 için hazırdır. Kodun PHP7'ye uyarlanması yapıldı ve tüm değişiklikler geliştirme dalında mevcut. GitHub'daki sayıya bakın

Ayrıca, Magento1'de php 7 desteği, geriye dönük uyumsuz değişiklikler gerektirir ve resmi olarak desteklenmeyeceğini düşünüyorum.


M2 ve PHP 7'nin aynı ay içinde piyasaya sürülmesi çok şaşırtıcı - Kasım 2015!
FireBear 17:15

7

Magento'nun genel siparişi nasıl hesapladığı ve indirimleri uyguladığıyla ilgili bir sorun var. Bu aynı zamanda, Paypal ekspres kasasını da durdurur, çünkü satır öğeleri indirim ile toplam toplamı arttırmaz.

Sorun Mage_Sales_Model_Config_Ordered::_compareTotals(), PHP7'de PHP5 ile aynı şekilde çalışmadığı ve uasort()şimdi sipariş için geçiş ilişkisine dayanıyor gibi görünüyor , ancak bunun sipariş toplamları için olması gerekmiyor.

Kullanmayı deneyin: -

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

Mükemmel, tuhaf +% 20 vergi toplamı toparladı.
evensis

6

Bu benim araştırmam, magento php7 uyumsuzluklarını sizinle paylaşmak istiyorum. Şu anda, tek tip değişken sözdizimi nedeniyle kodun başarısız olması gereken bazı yerler buldum.

Dosya: app / code / core / Mage / ImportExport / Model / İhracat / Ürün / Ürün / Tür / Soyut

Yöntem: overrideAttribute

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

Dosya: app / kod / çekirdek / Mage / ImportExport / Model / İhracat / Varlık / Müşteri

Yöntem: filterAttributeCollection

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

Dosya: app / kod / çekirdek / Mage / ImportExport / Model / Import / Uploader.php

Yöntem: _validateFile

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

Dosya: app / kod / çekirdek / Mage / Katalog / Model / Ürün / Bağlantı / Api / V2.php

Yöntem: atamak

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

Dosya: app / kod / çekirdek / Mage / Katalog / Model / Ürün / Bağlantı / Api / V2.php

Yöntem: güncelleme

$data->$attribute['code']

Dosya: lib / Varien / Dosya / Uploader.php

Yöntem: _validateFile

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

Dosya: app / kod / çekirdek / Mage / Çekirdek / Model / Layout.php

Yöntem: getOutput

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

5

Magento 1 ile ilgili diğer cevaplara ek olarak:

Zend_XmlRpc_ServerZend Framework 1.12.12'de bir PHP 7 uyumsuzluğu düzeltildi

CE 1.9.2.2 / EE 1.14.2.2'den önceki tüm sürümler Zend Framework'ün eski bir sürümünü kullanır, bu nedenle Magento'nun XML-RPC API'sini kullanırsanız sorun yaşayabilirsiniz.



1

Magento 2 CE Sürüm 2.1.4 kullanıyorum ve iyi çalışıyor.

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

Kısa cevap hayır, değil. Magento CE 1.9.2.4, yalnızca PHP 5.4 ve 5.5'i resmi olarak destekliyor. PHP 5.6 gayet iyi çalışıyor olsa da, günlük dosyalarını çok sayıda uyarı iletisiyle doyurur.

Uzun cevap, PHP7 desteğini çalıştırmak üzere değiştirmek için nispeten kolay olmasıdır. Bununla birlikte, birçok uzantı hala PHP7 uyumlu değildir, bu nedenle büyük ölçüde kendi başınızasınız.


0

PHP 7.0, Aralık 2018'in ilk haftası itibariyle hayatın sonu.

Bu yayından itibaren, Magento 2.2.3'ün (20 Şubat 2018 sürümü) şu anki sürümü PHP 7.1 veya PHP 7.2'yi desteklememektedir.

app/bootstrap.phpMagento yükleme klasörünüzü kontrol ederek desteklenen sürümleri onaylayabilir ve aşağıdakine benzer bir kod arayabilirsiniz :

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

Ayrıca .htaccess, apache 2.4 ile 500 hataya neden olan sorunlar var .

Ek olarak, dahil edilen besteci dosyası sadece php5.5 bağımlılıklarını içerir

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.