web-dev-qa-db-ja.com

Laravel Composer間違っているように見えるPHPバージョン

古いLaravelプロジェクトをインストールしようとしています。

composer installを実行すると、次のエラーが表示されます

This package requires php >=5.6.4 but your PHP version (5.5.35) does not satisfy that requirement.

走るとき

php -v

次の結果が得られます

PHP 7.1.10 (cli) (built: Oct 12 2017 14:00:12) ( ZTS )

これは私のcomposer.jsonのコンテンツです

{
    "name": "laravel/laravel",
    "description": "The Laravel Framework.",
    "keywords": ["framework", "laravel"],
    "license": "MIT",
    "type": "project",
    "require": {
        "php": ">=5.6.4",
        "doctrine/dbal": "^2.6",
        "guzzlehttp/guzzle": "^6.3",
        "intervention/image": "^2.4",
        "intervention/imagecache": "^2.3",
        "laravel/framework": "5.4.*",
        "laravel/tinker": "~1.0",
        "laravelcollective/html": "^5.4",
        "maatwebsite/Excel": "^2.1",
        "sentry/sentry-laravel": "^0.8.0",
        "spatie/laravel-glide": "^3.2",
        "spatie/laravel-permission": "^2.6",
        "spatie/laravel-pjax": "^1.3"
    },
    "require-dev": {
        "fzaninotto/faker": "~1.4",
        "mockery/mockery": "0.9.*",
        "phpunit/phpunit": "~5.7"
    },
    "autoload": {
        "classmap": [
            "database"
        ],
        "psr-4": {
            "App\\": "app/"
        }
    },
    "autoload-dev": {
        "psr-4": {
            "Tests\\": "tests/"
        }
    },
    "scripts": {
        "post-root-package-install": [
            "php -r \"file_exists('.env') || copy('.env.example', '.env');\""
        ],
        "post-create-project-cmd": [
            "php artisan key:generate"
        ],
        "post-install-cmd": [
            "Illuminate\\Foundation\\ComposerScripts::postInstall",
            "php artisan optimize"
        ],
        "post-update-cmd": [
            "Illuminate\\Foundation\\ComposerScripts::postUpdate",
            "php artisan optimize"
        ]
    },
    "config": {
        "preferred-install": "dist",
        "sort-packages": true,
        "optimize-autoloader": true
    }
}

このプロジェクトがphp 5.6を実行していると考える可能性はありますか?

ありがとうございました。

9
Notflip

私もこの問題を抱えています。すべてのcomposerパッケージを更新したくない場合は、composer.lockファイルを手動で変更し、実際のPHPバージョンをJSONオブジェクトのplatform > phpに書き込むことで、この問題を解決できます。

...
"platform": {
    "php": "7.1"
}
...

動作しますが、これを行うための最も推奨される方法は、composer.lockファイルを削除し、platform > phpcomposer.jsonバージョンを変更してからcomposer installを実行することです。

8
gd.silva
composer clear-cache
composer self-update
composer update --ignore-platform-reqs
or
composer install --ignore-platform-reqs

追加情報と@ nicohase、Nicoへの応答、composerはApacheと同じphp実行可能ファイルを使用していないと述べた場合、あなたは正しいです。なぜcomposer php-cliが他の必要なパッケージの要件を満たしているかどうかは、そうではありません。ユーザーはcomposerをphp-cliで管理しています。これは本質的に互換性があることを意味します。 Composerは、Webサーバーと他のパッケージで実行されているphpのバージョンに互換性があることを確認しています。

さて、理由については、私がリストした方法と他の投稿が示唆している方法の両方が、可能性の高い解決策です。 Composerシステム、PHP、およびインストールされているパッケージに関する情報は、1。継続性.. 2.バージョン履歴です。composer外部の変更が発生したときにキャッシュファイルを所有する場合、どのパッケージバージョンが相互に互換性があるか、いつ作成するかを知ることは困難です。

したがって、composer=は、更新またはインストールの実行時にphpバージョンをチェックせず、そのキャッシュを参照します。Apacheは、ユーザーによって無効にされているphpバージョンへの参照を取得します。作曲家のキャッシュファイルの参照です。そのため、キャッシュを削除することをお勧めします。

composer --self-update

composerは、管理するパッケージとは対照的に、自分自身を更新するように指示します...

composer update

その時点で、phpが最初にyum/aptを使用してインストールされ、その後簡単なApacheによってアップグレードされた場合、--ignore-platform-reqsフラグは、存在する可能性のあるrpm除外機能を回避し、 composerパッケージ。

7
gavintfn

HostGator共有ホスティングでは、使用したいphpバージョンの.bashrcファイルにエイリアスを作成することで、この問題を克服できました。

alias php='/opt/php71/bin/php'
alias composer="/opt/php71/bin/php ~/bin/composer/composer.phar"

.bashrcファイルを編集した後、ソースを忘れないでください: 'source〜/ .bashrc'

0
rwilson

将来誰かを助ける場合、PHPStorm(2017.2)内からcomposer updateを実行しようとしたときにこの問題に遭遇しました。上記の提案を試しましたが、どれも機能しませんでした。 PHPインストール済み(5.6、7.0、7.1)のバージョンはすべてPHPStorm設定の下に追加されているため、プロジェクトの要件に基づいて切り替えることができます。選択したCLIインタープリター設定に関係なく、常にPHP 7.0でcomposerを呼び出します。PHPStormの外部のターミナルでcomposerを実行すると問題なく動作します(設定されたパス7.1を参照)。私の場合、これはPHPStormのように感じます。バグ。

0
bfuzze

これはconfig/envの問題です。理想的には、テストする複数のphpバージョンを使用できます。Apacheでは、次のようなバージョンを交換できます。

Example:
Sudo a2dismod php5.6
Sudo a2enmod php7.0
Sudo service Apache2 restart

ここで起こっているのは、彼がphp -vを実行しているとき、php7で実行するように構成されているphp-cliを実行しているが、Apacheで5.5が有効になっている可能性があります。そう

Sudo a2dismod php5.5
Sudo a2enmod php7.0
Sudo service Apache2 restart
0
MSD