it-swarm.com.de

Laravel Composer sieht falsch PHP Ausführung

Ich versuche, ein älteres Laravel-Projekt zu installieren.

Beim Ausführen der Composer-Installation wird die folgende Fehlermeldung angezeigt

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

Wenn ich renne 

php -v

Ich bekomme das folgende Ergebnis

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

Dies ist der Inhalt meines 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
    }
}

Wie ist es möglich, dass dieses Projekt meint, ich habe PHP 5.6 ausgeführt?

Vielen Dank.

6
Notflip

Ich hatte auch dieses Problem. Wenn Sie nicht alle Composer-Pakete aktualisieren möchten, können Sie dieses Problem beheben, indem Sie die composer.lock-Datei manuell ändern und Ihre aktuelle PHP -Version in platform > php im JSON-Objekt schreiben.

Beispiel

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

Obwohl dies funktioniert, wird empfohlen, die composer.lock-Datei zu löschen, die platform > php-Version in composer.json zu ändern und anschließend composer install auszuführen.

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

zusätzliche Informationen und Antwort auf @nicohase, Nico, sind Sie korrekt, wenn Sie angeben, dass Composer nicht dieselbe PHP-Programmdatei wie Apache verwendet. Warum sollte Composer sicherstellen, dass php-cli die Anforderungen der anderen erforderlichen Pakete erfüllt? Es würde und tut es nicht. Der Benutzer verwaltet Composer mit php-cli, was inhärent bedeutet, dass sie kompatibel sind. Composer überprüft, ob die auf dem Webserver ausgeführte Version von PHP und die anderen Pakete kompatibel sind. 

Nun, warum, sowohl die Methode, die ich aufgeführt habe, als auch der andere Beitrag, sind wahrscheinlich Lösungen. Composer speichert Informationen zum System, zu PHP und zu den installierten Paketen aus zwei Gründen: 1. Kontinuität. 2. Versionsverlauf. Wenn Composer bei externen Änderungen seine eigenen Cachedateien geändert hat, ist es schwierig zu wissen, welche Paketversionen miteinander kompatibel waren und wann.

Der Composer überprüft also nicht die PHP-Version, wenn ein Update oder eine Installation durchgeführt wird, sondern verweist auf seinen Cache. Apache greift wahrscheinlich alle Verweise auf PHP-Versionen an, die vom Benutzer deaktiviert werden. In den Cache-Dateien des Komponisten wird ein Verweis gefunden. Mein Vorschlag empfiehlt, den Cache aus diesem Grund zu löschen. Zusätzlich die

composer --self-update

weist Composer an, sich selbst zu aktualisieren, im Gegensatz zu den von ihm verwalteten Paketen ...

composer update

wenn php ursprünglich über yum/apt installiert und dann von easy Apache aktualisiert wurde, umgeht das Flag --ignore-platform-reqs alle eventuell noch vorhandenen rpm-Ausschlüsse und ermöglicht die Installation oder Aktualisierung von die Komponistenpakete. 

3
gavintfn

Bei meinem HostGator Shared Hosting konnte ich dieses Problem überwinden, indem ich Aliase in meiner .bashrc-Datei für die PHP-Version erstellt, die ich verwenden wollte:

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

Denken Sie daran, nach der Bearbeitung der .bashrc-Datei eine Quelle zu erstellen: 'source ~/.bashrc'

0
rwilson

Wenn es jemandem in der Zukunft hilft, bin ich auf dieses Problem gestoßen, als ich versuchte, das Composer-Update in PHPStorm (2017.2) auszuführen. Ich habe die obigen Vorschläge ausprobiert, aber keiner von ihnen hat funktioniert. Ich habe mehrere Versionen von PHP installiert (5.6, 7.0, 7.1), die alle unter PHPStorm-Einstellungen hinzugefügt wurden, sodass ich je nach Projektanforderungen wechseln kann. Unabhängig von der ausgewählten CLI-Interpreter-Einstellung wird beim Aufruf von Composer immer PHP 7.0 angezeigt. Das Ausführen von Composer in einem Terminal außerhalb von PHPStorm funktioniert ohne Probleme (verweist auf die konfigurierte Version des Pfads 7.1). In meinem Fall fühlt sich das wie ein PHPStorm-Fehler an.

0
bfuzze

dies ist ein config/env-Problem. Idealerweise können Sie mehrere PHP-Versionen zum Testen verwenden. In Apache können Sie Versionen wie folgt austauschen:

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

Was hier passiert, ist, wenn er php -v ausführt. Er führt php-cli aus, das für die Ausführung in php7 konfiguriert ist, aber vielleicht hat sein Apache 5.5 aktiviert ..__ 

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