MagentoはPHP 7に対応していますか?


71

PHP 7はベータステータスに達し、現在多くのテストが行​​われています。Magentoが昨年「PHP 5.3でのみ実行」から「PHP 5.6と完全に互換」に追いついたことを考えると、Magento 1.xおよびMagento 2に対するPHP 7の互換性をどの程度考慮しているかを知りたいと思います。

私が見つかりました。アンナFilinaすることにより、このポスト彼女は(1.9.2でまだ変わらず)Magentoの1.9.1での1つの問題見つけましたが、Magentoの1は、ユニットテストを持っていないことを考えると、私はこれが唯一の問題だったことを信用していません。

質問は次のとおりです。Magento1に対するPHP 7の互換性は保証されますか?また、Magento 2はおそらくPHP 7で既にテストされているので(自動テストに感謝!)、既知の問題はありますか?


私はphp7でmagento 2.1.2を試しましたが、手間がかかりません。
-guru1

@ guru1なぜ詳しく説明できますか?私の経験では、うまく機能しています。
ファビアンシュメングラー16年

@guru ... php 7のmagento 2.1.2でプロジェクトを開発しており、正常に動作しています。どのような問題に直面していますか?
ジャイ

回答:



26

:あなたが最新バージョン、M CE 1.9.2.2を使用している場合は、完全なPHPに7との互換性をもたらす拡張がありhttps://github.com/Inchoo/Inchoo_PHP7が。(免責事項:私は著者ですが、コミュニティから多くの助けがあります。)

また、Composerからhttp://packages.firegento.com/からインストールできます。

ここに記載されているすべての非互換性は修正されています。私たちはまだ少数のエッジケースがあるかもしれないと思いますが、何も止まるものはありません。テスト、問題報告、プルリクエストは大歓迎です。


いくつかのローカルオーバーライドを配置することは非常に悪い考えです...
MagenX

2
@MagenXあなたがInchooであり、あなたが何をしているかを知っていない限り;)
7ochem

私たちは皆、時々愚かなことをします
.....-MagenX

2
ローカルオーバーライドの最大のリスクは、互換性のないバージョンのmagentoでそれらを使用することです。作成者の見た目から、最新のmagentoバージョンで拡張機能を最新の状態に維持しています。また、古いバージョンのmagentoを使用している場合、PHP7で遊ぶことは...また、盲目的にベストプラクティスに従うことも愚かであり、「それらを破る」価値がある場合があります。これは、「カーゴカルト」アプローチのもう1つの例に過ぎないと思います。ところで、拡張は素晴らしいです:)
grizwako

ここにある唯一の問題は、MODのサポートです。MODに関してクライアントが何を使用したいかはわかりません。すべてのMODをphp 7互換にするためにテスト/アップグレードするのは悪夢です。
ビルギャリソン

21

PHP7についての考えが、私はもののほとんどはPHP7でまだ有効だと思いますいいえ、あなたはのブログでより多くの情報を見つけることができませんマティアスGeniar

  • ext / mysql:非常に古いMySQL拡張機能であるにもかかわらず、まだ非常に広く使用されていると思いますが、今は誰もがpdo_mysqlに移行したときです。
  • set_magic_quotes_runtimeそしてmagic_quotes_runtime永久に...これらの廃止通知を見たようです。
  • iconv.input_encodingiconv.output_encodingこれまでのところ、これらを使用したことはありません...
  • #iniファイルのスタイルコメント:一貫性のために、私は常に好んでいます。(セミコロン).iniファイルのコメント!
  • preg_replace()eval修飾子:セキュリティ志向のシステム管理者向けです!

Magentoでできるのはpreg_replace()eval修飾子だけですが、そうでないことを願っています。

これに加えて、Magentoは1.9.2をアップデートしたTAFとともに出荷しました。devで見つけることができます。これにより、PHP7で一連のフロントエンドテストを実行し、後でログを調べることができます。


1
Fabianの主張を反映して、テストする最善の方法は、クリーンな1.9.2インストールから開始し、サンプルデータをロードして、TAFテストを実行することです。間違いなく、エラーを投げたり中断したりするものがあります。サードパーティの拡張機能やインストールに追加したカスタマイズを追加し始めると、おそらくそれ以上になるでしょう。ZendはPHP 7リリースでMagentoをテストしていたので、重大な問題があったとしても驚かされますが、些細な問題が多かったわけではありません。証券1.9.2は....テストを開始する場所です
ブライアン・「BJ」Hoffpauirジュニア

グッド説明Fabian..thx
アミットベラは

2
私はphp7ベータ版でMagento 1.9CEをテストしてきましたが、管理パネルに大きな違いをもたらします...カタログタスクなどは非常に高速です。3000の製品ストアでは、カタログリストの管理ページが12秒読み込み(php5-fpm)から3.5秒(php7-fpm)になりました。これを本番環境で使用したいので、nginxを使用して管理URLトラフィックをphp7経由でルーティングし、今のところphp5-fpmの前面トラフィックを維持しています。ただし、php7のリリースには興奮しました:)
リッキーオーディンマシューズ

@RickyOdinMatthewsこれはあなたのためにどのように働いていますか?まだphp7でのみadminを実行していますか?問題はありますか?管理者をphp7にルーティングするNGINX構成の一部を共有できますか?
オットネット

1
@Ottonetはい、まだ管理者で使用しています。私はあなたのためにここで私の「デフォルト」のconfエキスを入れているpastebin.com/9z1U94ug
リッキー・オーディンマシューズ

13

Magento 1に関するコメントはありませんが、Magento 2には「String」などのクラス名に関する問題がありました。修正にそれほど時間はかかりませんでしたが、すぐに動作しませんでした。Magento 2は修正される予定ですが、他の優先順位が最初にあるため、まだ修正されていない可能性があります。


1
情報はタン・アラン。参考までに、これはGithubの問題です:github.com/magento/magento2/issues/1367(例えばそれはそうと、「オブジェクト」として、まだ他の予約語)
ファビアンSchmengler

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かつ書き換えgetDatasetDataunsetDataaddFullNamesどこの方法は、そのどこでも$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年11月にリリースされるのは驚くべきことです。
FireBear

7

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

素晴らしく、私の奇妙な+ 20%の税金を総計に追加しました。
イベンシス

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

メソッド:assign

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

Magento 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月の第1週の時点でサポート終了です。

この投稿の時点で、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);
}

.htaccessApache 2.4で500エラーを引き起こす問題もあるようです。

さらに、含まれているコンポーザーファイルには、php5.5の依存関係のみが含まれています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.