Nie miałem problemów z instalacją Symfony 2.2.x przy użyciu Composera, zawsze kopiowałem stabilną wersję ze strony http://symfony.com/download .
composer create-project symfony/framework-standard-edition myproject/ 2.2.1
(Mam zainstalowanego Composera na całym świecie)
Zaciekawiony 2.3.0-RC1 Pomyślałem, że wszystko pójdzie gładko:
composer create-project symfony/framework-standard-edition mynewerproject/ 2.3.0-RC1
Ale został zamknięty przez następujące błędy:
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].
Czy muszę poprawić plik composer.json?
Aktualizacja rozwiązania
Brakowało mi rozszerzenia php intl, które zapewnia lib-icu
Tak łatwo, zainstaluj i skonfiguruj rozszerzenie intl. Od PHP 5.3 rozszerzenie Intl jest dystrybuowane domyślnie, ale niektóre dystrybucje, takie jak MAMP, nie mają Intl, więc musisz je zdobyć. Użyłem PEAR :
Moje kroki:
- Zainstaluj rozszerzenie Intl (obsługiwane przez PECL):
$ pear install pecl/intl
- być może będziesz musiał najpierw dodać kanał pecl do pear. - Jeśli używasz MAMP i nigdy nie pracowałeś z gruszką / peclem, sprawdź pomocny post na blogu lullabot ; MAMP nie jest dostarczany ze źródłem php, więc musisz pobrać źródło swojej wersji php i przenieść je do
/Applications/MAMP/bin/php/php[version]/include/php
(jak opisano w poście na blogu) - PEAR nie mógł znaleźć mojego php.ini, więc musiałem ręcznie dodać
extension=intl.so
do php.ini. W MAMP możesz łatwo edytować php.ini, przechodząc do Plik> Edytuj szablon> php. [Wersja] .ini
Wiersz poleceń:
- Podczas korzystania z Composera lub Konsoli CLI Symfony będziesz również potrzebował Intl, a ponieważ
php
CLI zwykle używa innegophp.ini
, będziesz chciał dodać tam również dyrektywę rozszerzenia. Aby znaleźć php.ini swojego CLI, po prostu zrób,$ php -i |grep php\.ini
aby znaleźć ścieżkę pliku i dodać równieżextension=intl.so
do tego php.ini. - Aby sprawdzić, czy Intl jest zainstalowany, możesz
$ php -m
sprawdzić dostępne moduły.
php
symfony
composer-php
Mark Fox
źródło
źródło
Odpowiedzi:
zaktualizuj rozszerzenie php-intl , stąd pochodzi błąd icu!
sprawdź, czy rozszerzenie jest włączone i poprawnie skonfigurowane w php.ini.
(wskazówka: php-cli czasami używa innego php.ini)
php.ini
sprawdź swoje
phpinfo()
ANDphp -m
na swoim terminalu, jeśli rozszerzenie zostało pomyślnie włączone.Sprawdź swoje aktualne wersje intl z php za pomocą:
uwaga: już nie jest potrzebne ( symfony 2.3 zostało w międzyczasie wydane )
dodaj flagę minimalnej stabilności @dev lub @rc do swojej zależności w ten sposób:
Domyślna stabilność w composer jest stabilna, której gałąź symfony 2.3 nie jest obecnie (jest to @rc). Przeczytaj więcej i flagi stabilności tutaj .
źródło
INTL::…
zawodzi. Ale widzę przez phpinfo () w przeglądarce, że Intl jest zainstalowany, a wersja ICU to 49.x. Jednak Composer nadal kończy się niepowodzeniem i wyświetla ten sam komunikat o błędzie.php -m
, NIE widzę intl. Wiem, że działa na serwerze internetowym, ale nie jest rozpoznawany w wierszu poleceń. Więc… muszę dodać to do wiersza poleceń?php -m
nadal nie rozpoznajesz z CLI?Wiele aplikacji będzie obsługiwać tylko język „en” i nie będzie potrzebować funkcji tłumaczenia ani php-intl. Jeśli to ty, lub nie możesz zainstalować php-intl na swoim serwerze, możesz jawnie dodać symfony / icu ~ 1.0 do swojego
composer.json
. 1.0 nie wymaga php-intl, podczas gdy 1.1+ tak.Jeśli nie potrzebujesz funkcji tłumaczenia:
Bez tej deklaracji i próbując zainstalować symfony / symfony 2.3 Composer może próbować zainstalować symfony / icu ~ 1.2, co wymagałoby zainstalowania php-intl.
Jest to dokładniej omówione w dokumentacji komponentu Symfony Intl w części „ICU and Deployment Problems”.
źródło
"require":{"symfony/symfony": "v2.3.3"}}
wynik: ´ Ładowanie repozytoriów kompozytora z informacjami o pakiecie Instalowanie zależności (w tym require-dev) - Instalowanie psr / log (1.0.0) Pobieranie: 100% - Instalowanie twig / twig (v1.13.2) Pobieranie: 100% - Instalowanie doctrine / common (2.3.0) Pobieranie: 100% - Instalowanie symfony / symfony (v2.3.3) Pobieranie: 100% - Instalowanie symfony / icu (v1.0.0) Pobieranie: 100% Zapisywanie pliku blokującego Generowanie automatyczniecomposer.lock
jest współdzielony między środowiskami z różnymi wersjami (lub brakiem) Intl.Rozwiązanie tego lub podobnych problemów można znaleźć tutaj: ICU and Deployment Problems
Zachowanie kompozytora powinno być inteligentne, wybierając odpowiedni komponent icu:
Podczas instalacji symfony 2.3 nie powinno być (teoretycznie) żadnego błędu. bez rozszerzenia intl.
Ale możesz zostać uwięziony, gdy twoje środowisko programistyczne różni się od twojego serwera produkcyjnego, jak wspomniano w tym artykule:
Jeśli nie masz uprawnień administratora do serwera produkcyjnego, możesz to naprawić, jak wspomniano w tym artykule. (poprawianie pliku composer.json)
Mam nadzieję, że te dodatkowe informacje pomogły mi w tym szczególnym przypadku w różnych środowiskach.
źródło
Mac OS Mavericks zawiera PHP 5.4.17 bez intl. Aby to uzyskać, musisz wykonać następujące kroki:
źródło
Wiem, że ta odpowiedź może nie być poprawną odpowiedzią na problem tej osoby, ale była rozwiązaniem mojego problemu o tym samym tytule. Udało mi się rozwiązać ten problem samodzielnie, włączając rozszerzenie intl w php.ini i aktualizując program Composer.
Uaktualnianie kompozytora.
Usuń komentarz z tej linii (w php.ini):
A także usuń komentarz te dwie linie poniżej [intl] w (php.ini):
I oczywiście zrestartuj Apache2. :)
Dodatkowe informacje:
Jeśli używasz komputera Mac i zainstalowano php z Homebrew, wykonaj następujące kroki:
(PHP 5,4)
(PHP 5,5)
Zrestartuj Apache.
źródło
Lepszym rozwiązaniem jest poprawienie pliku composer.json w wersji wymaganej przez serwer produkcyjny. Najpierw określ wersję ICU na serwerze: 1 2
Następnie napraw komponent Icu w pliku composer.json do pasującej wersji:
Ustaw wersję na „1.0. ”, Jeśli serwer nie ma zainstalowanego rozszerzenia intl; „1.1. ”, Jeśli serwer jest skompilowany z wersją ICU 4.2 lub starszą.
Wreszcie biegnij
na komputerze deweloperskim, przetestuj go i ponownie wdróż. Instalacja zależności zakończy się teraz sukcesem.
źródło