Überspringen Sie die PHP-Anforderungen des Komponisten

117

Wir verwenden PHPCI und Composer. Der Server, auf dem PHPCI ausgeführt wird, ist PHP 5.3.

Für ein Projekt haben wir das Facebook PHP SDK mit Composer hinzugefügt. Es erfordert PHP 5.4. Der Komponist wird von PHPCI ausgelöst und ausgeführt. Aber weil der CI-Server gerade PHP 5.3 Composer erhalten hat, ist die folgende Fehlermeldung fehlgeschlagen:

facebook/php-sdk-v4 4.0.9 requires php >=5.4.0 -> no matching package found.

Dies ließ meinen Build in PHPCI natürlich scheitern.

Gibt es eine Möglichkeit, diese Anforderung zu überspringen? Vielleicht durch Hinzufügen einer Option zu composer.json? Oder ein Parameter zum Aufruf von composer.phar?

Armin
quelle

Antworten:

284

Ich habe die Option gefunden:

composer install --ignore-platform-reqs

Ignorieren Sie die Plattformanforderungen (PHP- und Ext-Pakete).


Bearbeiten: Sie können die Plattformprüfungen damit überspringen, aber Composer ruft dann Pakete basierend auf der angegebenen PHP-Version ab. Wenn Sie also Composer benötigen, um während der Abhängigkeitsauflösung auch eine PHP-Version zu emulieren, können (und sollten!) Sie dies in Ihrer composer.json verwenden:

{
    "config": {
       "platform": {
           "php": "5.6.6"
       }
    }
}

https://getcomposer.org/doc/06-config.md#platform

Armin
quelle
Wie kann ich das private Repository ignorieren? Einige Pakete erfordern ein privates Repo.
Dungphanxuan
Genial. Es ist nützlich, wenn PHP CLI noch keine Versionsänderung widerspiegelt.
Giovannipds
In Composer 2 gibt es einen neuen Befehl, der verwendet werden kann: php.watch/articles/composer-ignore-platform-req
Armin
3

Bei vielen Befehlen können Sie den Komponisten anweisen, die PHP-Versionsprüfung mit dem Parameter " --ignore-platform-reqs" zu umgehen :

composer COMMAND --ignore-platform-reqs

Dadurch wird die PHP-Versionsspezifikation umgangen.

Beachten Sie, dass die Software möglicherweise funktioniert oder nicht: Die PHP-Versionsspezifikation ist vorhanden, da irgendwo im Code mindestens die angegebene PHP-Version benötigt wird. Wenn Sie diesen Code verwenden, wird die Software beschädigt.

Luca C.
quelle
--ignore-platform-reqsist nicht für alle Befehle verfügbar, wie Ihre Antwort impliziert.
Armin
-11

Wenn etwas eine bestimmte Version von PHP erfordert, wird es nicht in einer niedrigeren Version von PHP ausgeführt. Sie werden immer noch Fehler erhalten, wenn Sie die PHP-Anforderung umgehen.

Übrigens wird PHP 5.3 nicht mehr gepflegt, ich würde dringend empfehlen, den PHPCI-Server zu aktualisieren.

Wouter J.
quelle
2
Zuerst möchte ich wissen, wie man die PHP-Anforderung umgeht.
Armin
Sie können nicht und Sie werden nicht, da der Code in einer niedrigeren PHP-Version nicht funktioniert
Wouter J
3
Es wird. Nur der CI-Server hat die niedrige PHP-Version. Der Server, der das Facebook SDK enthält, läuft unter PHP 5.4. Es geht nur um den ci-Server, der alles in eine schöne bereitstellbare Zip-Datei packt.
Armin
Obwohl PHP 5.3 nicht mehr von den PHP-Kernentwicklern verwaltet wird, wird es von einigen Linux-Versionen weiterhin unterstützt und wird dies noch eine Weile tun. Ubuntu 12.04 LTS wird mit 5.3 ausgeliefert und wird bis April 2017 unterstützt ( wiki.ubuntu.com/LTS ). Die Umstellung auf 14.04 ist der beste Upgrade-Pfad, es gibt jedoch wichtige Änderungen, deren Behebung viel Arbeit erfordert (Apache 2.4, php-fpm usw.). Daher verwendet ein Großteil des Internets immer noch 5.3.x.
Andrew McCombe
Richtig, leider haben 99% der Pakete, auch die gut unterstützten, nicht die richtigen Anforderungen. Es ist mehr ein Indikator dafür, was der Entwickler verwendet, als alles andere.
Mschuett