क्या Magento PHP 7 के लिए तैयार है?


71

PHP 7 बीटा स्थिति तक पहुँच रहा है और इस समय बहुत सारे परीक्षण चल रहे हैं। यह देखते हुए कि मैगेंटो ने पिछले वर्ष के भीतर "केवल PHP 5.3 पर चलता है" से "PHP 5.6 के साथ पूरी तरह से संगत" को पकड़ लिया, मैं जानना चाहता हूं कि वे Magento 1.x के साथ-साथ Magento 2 के लिए PHP 7 संगतता पर कितना विचार कर रहे हैं।

मुझे यह पोस्ट एना फिलिना द्वारा मिली, जहां उसे Magento 1.9.1 में एक अंक मिला (अभी भी 1.9.2 में अपरिवर्तित है), लेकिन यह देखते हुए कि Magento 1 में यूनिट परीक्षण नहीं हैं, मुझे विश्वास नहीं है कि यह एकमात्र मुद्दा था।

तो सवाल यह है कि क्या Magento 1 के लिए PHP 7 संगतता सुनिश्चित की जाएगी? और Magento 2 के रूप में शायद पहले से ही PHP 7 पर परीक्षण किया गया है (स्वचालित परीक्षण धन्यवाद!), क्या कोई ज्ञात मुद्दे हैं?


मैं बस php7 पर Magento 2.1.2 की कोशिश की और इसके एक नहीं जाना।
गुरु १

@ गुरु 1 क्या आप विस्तृत कर सकते हैं, क्यों? मेरे अनुभव में, यह अच्छी तरह से काम करता है।
फाबियान शेंगलर

@ गुरु ... मैं php 7 और इसके ठीक काम पर magento 2.1.2 में अपनी परियोजना विकसित कर रहा हूँ। आप किस मुद्दे का सामना कर रहे हैं?
जय

जवाबों:


29

Magento ने आधिकारिक तौर पर 20 जनवरी 2016 को घोषणा की, कि CE और EE 2.0.1 आधिकारिक तौर पर PHP 7.0.2 का समर्थन करते हैं।

Magento एंटरप्राइज़ संस्करण और सामुदायिक संस्करण 2.0.1 अब उपलब्ध हैं और PHP7.0.2 के लिए आधिकारिक समर्थन सहित महत्वपूर्ण सुरक्षा और कार्यात्मक अपडेट प्रदान करते हैं।

लिंक: https://magento.com/blog/technical/new-magento-20-resources-and-support-php7


26

यदि आप सबसे हाल के संस्करण, एम सीई 1.9.2.2 का उपयोग कर रहे हैं, तो एक एक्सटेंशन है जो इसे पूर्ण PHP 7 संगतता में लाएगा: https://github.com/Inchoo/Inchoo_PHP7 । (अस्वीकरण: मैं लेखक हूं, हालांकि समुदाय से बहुत मदद मिली है।)

यह http://packages.firegento.com/ से संगीतकार के माध्यम से भी इंस्टॉल करने योग्य है ।

यहाँ उल्लिखित सभी असंगतताएँ निश्चित हैं। हमें लगता है कि अभी भी कुछ बढ़त के मामले हो सकते हैं, लेकिन कुछ भी नहीं दिखा। परीक्षण, समस्या रिपोर्टिंग और पुल अनुरोधों का स्वागत है।


कुछ स्थानीय ओवरराइड्स
लगाना

2
@ मेगनएक्सएक्स जब तक आप इनचू नहीं होते हैं और जानते हैं कि आप क्या कर रहे हैं;)
7ochem

हम सभी बेवकूफ चीजें करते हैं, समय-समय पर .....
मैगेंक्स

2
स्थानीय ओवरराइड्स के साथ सबसे बड़ा जोखिम उन्हें Magento के असंगत संस्करण के साथ उपयोग कर रहा है, ऐसा लगता है कि लेखक नवीनतम Magento संस्करण के साथ तारीख तक विस्तार रख रहा है। और अगर आप magento के पुराने संस्करण पर हैं, तो PHP7 के साथ खेलना ... इसके अलावा, नेत्रहीन रूप से सर्वोत्तम प्रथाओं का पालन करना भी बेवकूफी है, ऐसी स्थितियां हैं, जहां "उन्हें तोड़ना" इसके लायक है। मुझे लगता है कि यह "कार्गो पंथ" दृष्टिकोण का सिर्फ एक और उदाहरण है। Btw, विस्तार बहुत बढ़िया है :)
grizwako

मेरे पास यहां एकमात्र समस्या मॉड्स का समर्थन है। हम कभी नहीं जानते हैं कि हमारे क्लाइंट्स क्या उपयोग करना चाहते हैं जब यह mods की बात आती है और php 7 संगत होने के लिए हर मॉड का परीक्षण / अपग्रेड करना एक बुरा सपना है।
बिल गैरीसन

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: सुरक्षा-दिमाग़ी sysadmins के लिए हुर्रे!

मुझे लगता है कि preg_replace()मैगेंटो में हमारे पास एकमात्र चीज eval modifier है, लेकिन उम्मीद नहीं है।

इसके अलावा, मैगेंटो ने 1.9.2 को एक अद्यतन टीएएफ के साथ भेज दिया, आप देव में पा सकते हैं। इसके साथ ही आपको PHP7 पर फ्रंटएंड परीक्षणों का एक समूह चलाने में सक्षम होना चाहिए और बाद में लॉग की जांच करनी चाहिए


1
फैबियन के बिंदु को प्रतिध्वनित करते हुए, परीक्षण के लिए आपका सबसे अच्छा शर्त एक स्वच्छ 1.9.2 स्थापना के साथ शुरू करना है, नमूना डेटा लोड करना है, फिर टीएएफ परीक्षण चलाएं। निस्संदेह कुछ चीजें होंगी जो त्रुटियों को तोड़ती हैं या तोड़ती हैं, और शायद तब और भी अधिक जब आप तृतीय पक्ष एक्सटेंशन को जोड़ना शुरू करते हैं और आपके द्वारा इंस्टॉल किए गए किसी भी अनुकूलन को जोड़ सकते हैं। Zend PHP 7 रिलीज पर Magento का परीक्षण कर रहा था और मुझे आश्चर्य होगा कि अगर कोई प्रमुख मुद्दे थे, हालांकि ऐसा नहीं है कि इसमें मामूली समस्याएं हो सकती हैं। स्टॉक 1.9.2 परीक्षण शुरू करने के लिए जगह है ....
ब्रायन 'बीजे' हॉफपॉयर जूनियर

अच्छा स्पष्टीकरण Fabian..thx
अमित बेरा

2
मैं php7 बीटा पर Magento 1.9CE का परीक्षण कर रहा हूं, यह व्यवस्थापक पैनल के लिए इतना बड़ा अंतर बनाता है ... कैटलॉग कार्य आदि बहुत तेज़ हैं। 3000 उत्पाद स्टोर पर, कैटलॉग सूची व्यवस्थापक पृष्ठ 12s लोडिंग (php5-fpm) से 3.5s (php7-fpm) पर चला गया। हम उत्पादन में इसका उपयोग करने के लिए उत्सुक हैं, इसलिए मैं nginx का उपयोग मार्ग व्यवस्थापक url यातायात php7 के माध्यम से कर रहा हूं, और अब के लिए php5-fpm पर फ्रंट-फेसिंग ट्रैफ़िक रख रहा हूं। Php7 जारी करने के लिए उत्साहित है, हालांकि :)
रिकी ओडिन मैथ्यू

@RickyOdinMatthews यह आपके लिए कैसे काम कर रहा है? अभी भी केवल php7 पर व्यवस्थापक चल रहा है? कोई परेशानी? क्या आप एनजीआईएनएक्स कॉन्फिग का हिस्सा साझा कर सकते हैं जो php7 को रूट करता है?
ओट्टोनेट

1
@ ओटनेट हां, फिर भी इसका उपयोग व्यवस्थापक पर कर रहा है। मैंने अपना 'डिफॉल्ट' कॉन्फिडेंस आपके लिए यहां pastebin.com/9z1U94ug में
रिकी ओडिन मैथ्यूज

13

Magento 1 पर कोई टिप्पणी नहीं है, लेकिन Magento 2 में "स्ट्रिंग" जैसे वर्ग के नाम के साथ कुछ समस्याएं थीं। इसे ठीक करने में अधिक समय नहीं लगा, लेकिन यह बॉक्स से बाहर नहीं निकला। मुझे उम्मीद है कि Magento 2 तय हो जाएगा, लेकिन पहले अन्य प्राथमिकताओं के कारण इसे अभी तक ठीक नहीं किया जा सकता है।


1
जानकारी के लिए एलन एलन। संदर्भ के लिए, यह गितुब मुद्दा है: github.com/magento/magento2/issues/1367 (अभी भी अन्य आरक्षित शब्द जैसे "ऑब्जेक्ट" जैसा लगता है)
फैबियन शेंगलर

3
वर्तमान स्थिति: विकसित शाखा में तय किए गए वर्ग के नाम, कोई और अधिक ज्ञात समस्या नहीं
२२:

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
बेशक किसी को समाधान में दिलचस्पी है;; क्या आप लिंक किए गए लेख की सामग्री को जोड़ सकते हैं? आपके ब्लॉग को अतिरिक्त जानकारी के साथ जोड़ने में कुछ भी गलत नहीं है, लेकिन इसका जवाब अपने दम पर खड़ा होना चाहिए।
फैबियन शेंगलर

खैर, सवाल यह था कि क्या Magento PHP 7 के लिए तैयार है, इस बारे में नहीं कि उन्हें एक साथ कैसे काम करना है। किसी भी तरह, मैंने एक संक्षिप्त समाधान के साथ अपना जवाब अपडेट किया है।
जसोल्टी

1
इसी तरह की एक त्रुटि होती है Varien_File_Uploader, देखें magento.stackexchange.com/questions/93066/…
Fabian Schmengler

1.9.2.4 के लिए समान
lrkwz

8

Magento2 PHP 7 के लिए तैयार है। PHP7 में कोड का अनुकूलन किया गया था और सभी परिवर्तन विकसित शाखा में उपलब्ध हैं। GitHub पर मुद्दा देखें

इसके अलावा, Magento1 में php 7 के समर्थन में पिछड़े असंगत परिवर्तन की आवश्यकता है और मुझे लगता है कि आधिकारिक तौर पर समर्थन नहीं किया जाएगा।


यह शुद्ध आश्चर्यजनक है कि M2 और PHP 7 एक ही महीने में रिलीज़ होंगे - नवंबर 2015!
फायरबियर

7

मैगेंटो ऑर्डर ग्रैंड टोटल की गणना कैसे कर रहा है और डिस्काउंट कैसे लागू कर रहा है, इस बारे में समस्या है। यह भी पेपैल एक्सप्रेस चेकआउट रोक रहा है, क्योंकि लाइन आइटम छूट के साथ भव्य कुल तक नहीं जोड़ते हैं।

समस्या यह है कि 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% टैक्स को भव्य कुल पर टॉप किया।
इवेंसिस

6

यह मेरा शोध है जो मैं आपके साथ magento php7 असंगतियों के बारे में साझा करना चाहता हूं। वर्तमान में मुझे कुछ ऐसे स्थान मिले हैं जहां समान रूप से परिवर्तनशील सिंटैक्स के कारण कोड को विफल होना चाहिए।

फ़ाइल: एप्लिकेशन / कोड / कोर / दाना / ImportExport / मॉडल / निर्यात / इकाई / उत्पाद / प्रकार / Abstract.php

विधि: ओवरराइड करें

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

फ़ाइल: एप्लिकेशन / कोड / कोर / दाना / ImportExport / मॉडल / निर्यात / इकाई / Customer.php

विधि: FilterAttributeCollection

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

फ़ाइल: ऐप / कोड / कोर / मैज / इंपोर्टएक्सपोर्ट / मॉडल / इंपोर्ट / अपलोडर। एफपी

विधि: _validateFile

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

फ़ाइल: एप्लिकेशन / कोड / कोर / दाना / सूची / मॉडल / उत्पाद / लिंक / एपीआई / V2.php

विधि: असाइन करें

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

फ़ाइल: एप्लिकेशन / कोड / कोर / दाना / सूची / मॉडल / उत्पाद / लिंक / एपीआई / V2.php

विधि: अद्यतन

$data->$attribute['code']

फ़ाइल: lib / Varien / File / Uploader.php

विधि: _validateFile

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

फ़ाइल: ऐप / कोड / कोर / मैज / कोर / मॉडल / लेआउट.php

विधि: getOutput

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

5

Magento 1 से संबंधित अन्य उत्तरों के अलावा:

PHP 7 की असंगति Zend_XmlRpc_ServerZend फ्रेमवर्क 1.12.12 में तय की गई है

CE 1.9.2.2 / EE 1.14.2.2 से पहले के सभी संस्करण Zend फ्रेमवर्क के पुराने संस्करण का उपयोग करते हैं, इस प्रकार यदि आप Magento के XML-RPC API का उपयोग करते हैं तो समस्या हो सकती है।


1

इंच से फाइलों की जांच करें जो कि M1 को php 7 के साथ संगत करने के लिए बदल दिए गए हैं, वे कुछ फाइलों में मामूली बदलाव हैं लेकिन इनचू से बुद्धिमान कार्य हैं। https://github.com/Inchoo/Inchoo_PHP7/tree/master/app/code/local/Inchoo/PHP7


1
Inchoo से प्रोजेक्ट के लिए बेस URL => github.com/Inchoo/Inchoo_PHP7
Fiasco Labs

1

मैं Magento 2 CE संस्करण 2.1.4 का उपयोग कर रहा हूं और ठीक काम करता हूं।

Magento \ एप्लिकेशन \ 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

दिसंबर 2018 के पहले सप्ताह के रूप में PHP 7.0 जीवन का अंत है।

इस पोस्ट के अनुसार, 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जो अपाचे 2.4 के साथ 500 त्रुटियों का कारण।

इसके अतिरिक्त, कंपोज़र फ़ाइल में केवल php5.5 के लिए निर्भरता शामिल है

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.