1. ホーム
  2. php

PHP のバージョンを X と Y の間で要求するよう composer に強制する

2023-12-15 04:59:12

質問

サーバー (最大 5.3.5) と開発マシン (最大 5.5.9) で異なる PHP バージョンが混在して動作しています。

ここで、いくつかの外部バンドルの最新版を取得するために "composer update" を行ったところ、問題に遭遇しました。 composer.json は次のようなものです。

"require": {
        "php": ">=5.3.3",
        .....
    },

PHP 5.5を必要とするBundleをいくつか入手しました。私たちの開発マシン上では問題ありませんが、サーバー上では :(

composer に PHP のバージョンを 5.3.3 から 5.3.5 の間で要求するように指示することは可能ですか?または、利用可能な最大バージョンを指定することはできますか?

試してみたところ

"require": {
        "php": ">=5.3.3, <=5.3.5",
            .....
        },

"require": {
            "php": "<=5.3.5",
                .....
            },

を実行しましたが、両方ともうまくいきませんでした。要求されたパッケージphpはどのバージョンでも見つかりませんでした。パッケージ名にタイプミスがあるかもしれません。

何かアイデアはありますか?前もってありがとうございます。

どのように解決するのですか?

利用可能な最新の PHP で開発し、非常に古いバージョンで本番稼動させていることは、控えめに言っても疑わしいと思います。セキュリティ パッチを見逃してしまうだけでなく、より重要なこととして、バージョン 5.3.9 および 5.3.23 で導入された PHP のバグ修正により、いくつかの詳細で PHP の動作がかなり根本的に変更されているため、ここから多くの問題が発生する可能性があります。5.4 や 5.5 の機能を誤って使用してしまう危険性について話しているわけではありません。

そして、Composer にこの状況に対処させる方法は本当にありません。を実行するときに使用される PHP のバージョンは composer update を実行するときに使用される PHP のバージョンが依存関係の解決を決定し、 PHP のバージョンとインストールされている PHP 拡張に影響されます。

更新に使用している PHP がこのバージョン要件に一致しない場合、パッケージを 5.3.3 から 5.3.5 までの PHP バージョンにのみ使用するように定義することはできません。使用されている PHP のバージョンが上限バージョンの制約を超えているため、そのようなパッケージはバージョン要件を満たす資格がなく、Composer はパッケージが見つからなかったと報告します (パッケージを見たことを伝えるのではなく、バージョン制約のために無視しなければならなかったのです)。

おそらく、3 つの明白な方法があります。

  1. 開発環境を、実際に使用している製品版にダウングレードする。複数使用されている場合。最も古いものを使用します。そうすることで、PHPのバージョンに関するあらゆる要件が一致するようになります。実行 composer update を実行し、完了です。

  2. 本番環境をアップグレードする。これ以上説明する必要はありませんが、PHP 5.5 は 5.3 よりも本当に速いので、多くの非常に素晴らしい PHP 機能を失うだけでなく、かなりのパフォーマンス向上も失うことになることを述べておかなければなりません。

  3. グローバルまたはプロジェクトの composer.json に "platform.php" 設定を追加します。これにより、Composer 自体が動作している PHP のバージョンを上書きし、代わりにその異なる PHP バージョンで依存関係を計算するように Composer に指示します。 composer config -g platform.php 5.3.5 を指定するとグローバルな設定になり、それ以降の Composer の実行に影響します。 -g はローカル設定 (そのプロジェクトでの Composer の操作にのみ影響します。異なるバージョンの PHP を使って複数のプロジェクトで開発を行っている場合)。