Ich hatte keine Probleme bei der Installation von Symfony 2.2.x mit Composer. Ich habe immer nur die stabile Version unter http://symfony.com/download kopiert .
composer create-project symfony/framework-standard-edition myproject/ 2.2.1
(Ich habe Composer global installiert.)
Neugierig auf 2.3.0-RC1 Ich dachte, das würde reibungslos funktionieren:
composer create-project symfony/framework-standard-edition mynewerproject/ 2.3.0-RC1
Wurde aber durch folgende Fehler heruntergefahren:
Your requirements could not be resolved to an installable set of packages.
Problem 1
- symfony/icu v1.2.0-RC1 requires lib-icu >=4.4 -> the requested linked library icu has the wrong version installed or is missing from your system, make sure to have the extension providing it.
- symfony/icu v1.1.0-RC1 requires lib-icu >=3.8 -> the requested linked library icu has the wrong version installed or is missing from your system, make sure to have the extension providing it.
- symfony/symfony v2.3.0-RC1 requires symfony/icu >=1.0,<2.0 -> satisfiable by symfony/icu[v1.1.0-RC1, v1.2.0-RC1].
- Installation request for symfony/symfony 2.3.* -> satisfiable by symfony/symfony[v2.3.0-RC1].
Muss ich die Datei composer.json optimieren?
Lösungsupdate
Mir fehlte die PHP-Intl-Erweiterung, die bietet lib-icu bereitstellt
So einfach, installieren und konfigurieren Sie die intl-Erweiterung. Ab PHP 5.3 ist die Intl-Erweiterung standardmäßig verteilt, aber einige Distributionen, wie MAMP, haben kein Intl, sodass Sie es erwerben müssen. Ich habe PEAR benutzt :
Meine Schritte:
- Installieren Sie die Intl-Erweiterung (von PECL verwaltet):
$ pear install pecl/intl
- Möglicherweise müssen Sie zuerst den Pecl-Kanal zu Pear hinzufügen. - Wenn Sie MAMP verwenden und noch nie mit Pear / Pecl gearbeitet haben, lesen Sie den hilfreichen Blog-Beitrag von lullabot . MAMP wird nicht mit der PHP-Quelle geliefert, daher müssen Sie die Quelle für Ihre PHP-Version herunterladen und in die Quelle verschieben
/Applications/MAMP/bin/php/php[version]/include/php
(wie im Blog-Beitrag beschrieben). - PEAR konnte meine php.ini nicht finden, daher musste ich sie manuell
extension=intl.so
zu php.ini hinzufügen . In MAMP können Sie die php.ini einfach bearbeiten, indem Sie zu Datei> Vorlage bearbeiten> php. [Version] .ini gehen
Befehlszeile:
- Wenn Sie die Konsolen-CLI von Composer oder Symfony verwenden, benötigen Sie auch Intl. Da die
php
CLI normalerweise eine andere verwendetphp.ini
, möchten Sie dort auch die Erweiterungsanweisung hinzufügen. Um die php.ini Ihrer CLI zu finden, müssen Sie lediglich$ php -i |grep php\.ini
den Dateipfad ermitteln und hinzufügenextension=intl.so
dieser php.ini . - Um zu überprüfen, ob Intl installiert ist, können Sie
$ php -m
die verfügbaren Module überprüfen.
php
symfony
composer-php
Mark Fox
quelle
quelle
Antworten:
aktualisiere deine php-intl erweiterung, da kommt der icu fehler her!
Überprüfen Sie, ob die Erweiterung auch in der php.ini aktiviert und ordnungsgemäß konfiguriert ist.
(Hinweis: php-cli verwendet manchmal eine andere php.ini)
php.ini
Überprüfen Sie Ihr
phpinfo()
UNDphp -m
von Ihrem Terminal aus, ob die Erweiterung erfolgreich aktiviert wurde.Überprüfen Sie Ihre aktuellen intl-Versionen von PHP mit:
Achtung: nicht mehr benötigt ( Symfony 2.3 wurde inzwischen veröffentlicht )
Fügen Sie Ihrer Abhängigkeit das Mindeststabilitätsflag @dev oder @rc wie folgt hinzu:
Die Standardstabilität in Composer ist stabil, welcher Symfony 2.3-Zweig derzeit nicht vorhanden ist (es ist @rc). Lesen Sie mehr eine Stabilität Flaggen hier .
quelle
INTL::…
schlägt fehl. Aber ich kann über phpinfo () im Browser sehen, dass Intl installiert ist und die ICU-Version 49.x ist. Composer schlägt jedoch immer noch mit derselben Fehlermeldung fehl.php -m
sehe ich NICHT intl. Ich weiß, dass es auf dem Webserver funktioniert, aber es wird in der Befehlszeile nicht erkannt. Also ... muss ich es der Kommandozeile hinzufügen?php -m
erkenne es aber immer noch nicht von der CLI?Viele Anwendungen unterstützen nur das Gebietsschema "en" und benötigen keine Übersetzungsfunktionen oder PHP-Intl. Wenn Sie es sind oder Sie php-intl nicht auf Ihrem Server installieren können, können Sie symfony / icu ~ 1.0 explizit zu Ihrem Server hinzufügen
composer.json
. 1.0 erfordert kein php-intl, während 1.1+ dies tut.Wenn Sie keine Übersetzungsfunktionen benötigen:
Ohne diese Deklaration und den Versuch, symfony / symfony 2.3 zu installieren, versucht Composer möglicherweise, symfony / icu ~ 1.2 zu installieren, was die Installation von php-intl erfordern würde.
Dies wird in den Dokumenten der Symfony Intl-Komponente unter "Probleme mit der Intensivstation und der Bereitstellung" explizit ausführlicher behandelt .
quelle
"require":{"symfony/symfony": "v2.3.3"}}
Ergebnis: ´Laden von Composer-Repositorys mit Paketinformationen Installieren von Abhängigkeiten (einschließlich require-dev) - Installieren von psr / log (1.0.0) Herunterladen: 100% - Installieren von twig / twig (v1.13.2) Herunterladen: 100% - Installieren von Doctrine / Common (2.3.0) Herunterladen: 100% - Installieren von Symfony / Symfony (v2.3.3) Herunterladen: 100% - Installieren von Symfony / icu (v1.0.0) Herunterladen: 100% Schreiben einer Sperrdatei Generieren von Autoload-Dateiencomposer.lock
Umgebungen mit unterschiedlichen Versionen (oder Abwesenheit) von Intl gemeinsam genutzt werden.Eine Lösung für dieses oder ähnliche Probleme finden Sie hier: Probleme auf der Intensivstation und bei der Bereitstellung
Das Verhalten des Komponisten sollte intelligent sein und die richtige ICU-Komponente auswählen:
Bei der Installation von Symfony 2.3 sollte (theoretisch) kein Fehler auftreten. ohne intl-erweiterung.
Sie können jedoch gefangen sein, wenn sich Ihre Entwicklungsumgebung von Ihrem Produktionsserver unterscheidet, wie in diesem Artikel erwähnt:
Wenn Sie keinen Root-Zugriff auf Ihren Produktionsserver haben, können Sie diesen wie in diesem Artikel beschrieben beheben. (optimiert composer.json)
Hoffe, diese zusätzlichen Informationen haben geholfen, da sie mir für diesen speziellen Fall in verschiedenen Umgebungen geholfen haben.
quelle
Mac OS Mavericks wird mit PHP 5.4.17 ohne intl geliefert. Um dies zu erhalten, müssen Sie die folgenden Schritte ausführen:
quelle
Ich weiß, dass diese Antwort möglicherweise nicht die richtige Antwort auf das Problem dieser Person ist, aber es war die Lösung für mein Problem mit demselben Titel. Ich konnte dieses Problem selbst beheben, indem ich die intl-Erweiterung in php.ini aktivierte und den Composer aktualisierte.
Komponist aktualisieren.
Kommentar aus dieser Zeile entfernen (in php.ini):
Und entfernen Sie auch den Kommentar zu diesen beiden Zeilen unter [intl] in (php.ini):
Und starten Sie apache2 natürlich neu. :) :)
Zusätzliche Information:
Wenn Sie einen Mac verwenden und PHP mit Homebrew installiert haben, gehen Sie folgendermaßen vor:
(PHP 5.4)
(PHP 5.5)
Starten Sie Apache neu.
quelle
Eine bessere Lösung besteht darin, Ihre composer.json auf die vom Produktionsserver benötigte Version zu korrigieren. Ermitteln Sie zunächst die ICU-Version auf dem Server: 1 2
Korrigieren Sie dann die Icu-Komponente in Ihrer composer.json-Datei auf eine passende Version:
Setzen Sie die Version auf "1.0 ", wenn auf dem Server die intl-Erweiterung nicht installiert ist. 1.1. ", Wenn der Server mit ICU 4.2 oder niedriger kompiliert ist.
Zum Schluss laufen
Testen Sie auf Ihrem Entwicklungscomputer ausführlich und stellen Sie es erneut bereit. Die Installation der Abhängigkeiten ist nun erfolgreich.
quelle