Composer를 통해 Symfony 2.3.x를 설치할 때 lib-icu 종속성 문제


112

Composer를 사용하여 Symfony 2.2.x를 설치하는 데 문제가 없었습니다. 항상 http://symfony.com/download 에서 안정 버전을 복사했습니다 .

composer create-project symfony/framework-standard-edition myproject/ 2.2.1

(전 세계적으로 Composer를 설치했습니다.)
2.3.0-RC1에 대한 궁금증 나는 이것이 원활하게 진행될 것이라고 생각했습니다.

composer create-project symfony/framework-standard-edition mynewerproject/ 2.3.0-RC1

그러나 다음 오류로 인해 종료되었습니다.

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].

composer.json 파일을 조정해야합니까?


솔루션 업데이트

제공 하는 PHP intl 확장 이 누락되었습니다.lib-icu

매우 쉽게 intl 확장을 설치하고 구성하십시오. PHP 5.3부터 Intl 확장이 기본적으로 배포되지만 MAMP와 같은 일부 배포에는 Intl이 없으므로이를 획득해야합니다. 내가 사용 PEAR를 :

내 단계 :

  • Intl 확장 (PECL에서 관리)을 설치합니다. $ pear install pecl/intl — 먼저 pecl 채널을 pear에 추가해야 할 수 있습니다.
  • MAMP를 사용 하고 pear / pecl로 작업 한 적이 없다면 lullabot의 유용한 블로그 게시물을 확인 하세요 . MAMP는 php 소스와 함께 제공되지 않으므로 php 버전의 소스다운로드하고 소스를 이동해야합니다 /Applications/MAMP/bin/php/php[version]/include/php(블로그 게시물에서 다룹니다).
  • PEAR가 내 php.ini를 찾을 수 없어서 수동으로 extension=intl.sophp.ini에 추가 해야했습니다. MAMP에서 파일> 템플릿 편집> php. [version] .ini로 이동하여 php.ini를 쉽게 편집 할 수 있습니다.

명령 줄 :

  • Composer 또는 Symfony의 콘솔 CLI를 사용할 때 Intl도 필요하며 phpCLI는 일반적으로 다른 php.ini것을 사용하기 때문에 거기에 확장 지시문을 추가하고 싶을 것입니다. CLI의 php.ini를 찾으려면 $ php -i |grep php\.ini파일 경로 를 찾고 추가하기 만하면 됩니다.extension=intl.so 해당 php.ini에도 하면됩니다.
  • Intl이 설치되어 $ php -m있는지 확인하려면 사용 가능한 모듈을 확인할 수 있습니다.

어떤 OS를 사용하고 있습니까? 그런 다음 국제 확장을 업데이트하는 방법에 대한 정보를 제공 할 수 있습니다.
Nicolai Fröhlich 2013 년

PHP 5.2.x 호환성을 위해 pecl / intl을 사용하지 마십시오. PHP 5.3부터 Intl은 핵심 확장입니다.
Jérôme Vieilledent

2
@ JérômeVieilledent 현재 MAMP 배포판이 Intl을 번들로 제공하지 않는 것 같습니다.이 경우 PECL을 사용하여 빌드 할 수있는 옵션 만 남습니다. php.net/manual/en/intl.installation.php
Mark Fox

답변:


118

php-intl 확장을 업데이트 하면 icu 오류가 발생합니다!

sudo aptitude install php5-intl                 // i.e. ubuntu
brew install icu4c                              // osx

확장이 활성화되어 있고 php.ini에서도 올바르게 구성되어 있는지 확인하십시오.

(힌트 : php-cli는 때때로 다른 php.ini를 사용합니다)

php.ini

extension=intl.so       ; *nix
extension=php_intl.dll  ; windows

[intl]
intl.default_locale = en_utf8
intl.error_level = E_WARNING

phpinfo()AND 확인php -m확장이 성공적으로 활성화되었는지 터미널에서 를 .

다음을 사용하여 PHP에서 현재 intl 버전을 확인하십시오.

Intl::getIcuVersion();
Intl::getIcuDataVersion();

주의 : 더 이상 필요하지 않음 ( 심포니 2.3이 출시되었습니다. )

최소 안정성 플래그 @dev 또는 @rc를 다음과 같이 종속성에 추가하십시오.

composer create-project symfony/framework-standard-edition mynewerproject/ 2.3.*@dev 

composer의 기본 안정성은 안정적이며 심포니 2.3 브랜치는 현재가 아닙니다 (@rc입니다). 여기 에서 안정성 플래그에 대해 자세히 알아보십시오 .


훌륭한 기사. Composer 문서를 보면 안정성 플래그가 작동하는지 확실하지 않습니다.
Mark Fox

PEAR / PECL을 통해 php-intl을 설치했습니다. 어떤 이유로 INTL::…실패합니다. 하지만 브라우저에서 phpinfo ()를 통해 Intl이 설치되어 있고 ICU 버전이 49.x임을 알 수 있습니다. 그러나 Composer는 여전히 동일한 오류 메시지와 함께 실패합니다.
Mark Fox

어떤 운영 체제? 예를 들어 우분투에서는 "sudo aptitude install php5-intl"을 사용합니다. php.ini에서 확장이 활성화되어 있으며 명령 줄에서 php -m으로 표시됩니까?
Nicolai Fröhlich 2013 년

1
Mac OSX 10.7.5 — 실행할 때 php -mintl이 표시되지 않습니다. 웹 서버에서 작동한다는 것을 알고 있지만 명령 줄에서는 인식되지 않습니다. 그래서 ... 명령 줄에 추가해야합니까?
Mark Fox

Homebrew를 통해 설치했지만 php -m여전히 CLI에서 인식되지 않습니까?
Mark Fox

21

많은 응용 프로그램은 "en"로케일 만 지원하며 번역 기능이나 php-intl이 필요하지 않습니다. 이것이 당신이거나 서버에 php-intl을 설치할 수 없다면, symfony / icu ~ 1.0을 명시 적으로 추가 할 수 있습니다.composer.json . 1.0에는 php-intl이 필요하지 않지만 1.1+에는 필요합니다.

번역 기능이 필요하지 않은 경우 :

$ php bin/composer.phar require symfony/icu ~1.0

이 선언없이 symfony / symfony 2.3을 설치하려고하면 Composer는 php-intl을 설치해야하는 symfony / icu ~ 1.2를 설치하려고 할 수 있습니다.

이것은 "ICU 및 배포 문제" 에있는 Symfony Intl 구성 요소의 문서 에서보다 광범위하게 다루고 있습니다 .


1
감사합니다. Symfony2가 선택 사항이어야하고 많은 환경에 설치되지 않은 기능을 통해 설치를 종료하는 것은 어리석은 일입니다.
Acyra 2013-08-08

미안하지만 사실이 아닙니다. Symfony 2.3을 설치하면 구성을 검사하고 올바른 icu 구성 요소를 결정합니다. 종료되지 않습니다.
tweini

POC composer.json : "require":{"symfony/symfony": "v2.3.3"}}결과 : ´ 패키지 정보가있는 composer 저장소로드 중 종속성 설치 (Require-dev 포함)-psr / log 설치 (1.0.0) 다운로드 : 100 %-twig / twig 설치 (v1.13.2) 다운로드 : 100 % -doctrine / common 설치 (2.3.0) 다운로드 : 100 %-symfony / symfony 설치 (v2.3.3) 다운로드 : 100 %-symfony / icu 설치 (v1.0.0) 다운로드 : 100 % 쓰기 잠금 파일 생성 중 자동로드 파일
tweini

1
문서에서 설명했듯이 문제는 다음과 같은 경우에 발생합니다. composer.lock Intl의 다른 버전 (또는 부재)이있는 환경간에 공유 .
Tamlyn 2013

감사합니다! 내 손가락을 교차하는 것은 여전히에서 GoDaddy에 클라이언트 내 Symfony2 프로젝트 실행 얻을 수 있습니다
매트

15

이 문제 또는 유사한 문제에 대한 해결책은 여기에서 찾을 수 있습니다. ICU 및 배포 문제

composer의 동작은 올바른 icu 구성 요소를 선택하는 지능적이어야합니다.

  • symfony / icu 1.0. * : intl 확장을 사용할 수없는 경우
  • symfony / icu 1.1. * : intl이 ICU 4.0 이상으로 컴파일 된 경우
  • symfony / icu 1.2. * : intl이 ICU 4.4 이상으로 컴파일 된 경우

(이론적으로) 심포니 2.3을 설치할 때 오류가 없어야합니다. intl-extension이 없습니다.

그러나이 기사에서 언급 한 것처럼 개발 환경이 프로덕션 서버와 다를 때 갇힐 수 있습니다.

  • 개발 기계는 ICU 4.4 이상으로 컴파일되었지만 서버는> 4.4보다 낮은 ICU 버전으로 컴파일되었습니다.
  • intl 확장은 개발 컴퓨터에서는 사용할 수 있지만 서버에서는 사용할 수 없습니다.

프로덕션 서버에 대한 루트 액세스 권한이없는 경우이 기사에서 언급 한대로 수정할 수 있습니다. (tweaking composer.json)

이 추가 정보가 다른 환경에서이 특별한 경우에 도움이 되었기를 바랍니다.


9

Mac OS Mavericks는 intl없이 PHP 5.4.17과 함께 제공됩니다. 이를 얻으려면 다음 단계를 따라야합니다.

brew install icu4c
sudo pecl install intl 
The path to the ICU libraries and headers is: /usr/local/opt/icu4c/
Edit /etc/php.ini and add extension=intl.so to the end.

6

이 답변이이 사람의 문제에 대한 정답이 아닐 수도 있다는 것을 알고 있지만, 같은 제목의 문제에 대한 해결책이었습니다. php.ini에서 intl 확장을 활성화하고 composer를 업그레이드하여이 문제를 직접 해결할 수있었습니다.

작곡가 업그레이드.

php composer.phar self-update

이 줄에서 주석을 제거하십시오 (php.ini에서) :

extension=php_intl.dll

또한 (php.ini)의 [intl] 아래에있는이 두 줄의 주석을 제거하십시오.

[intl]
intl.default_locale = en_utf8
intl.error_level = E_WARNING

물론 apache2를 다시 시작하십시오. :)

추가 정보:

Mac을 사용하고 Homebrew와 함께 PHP를 설치 한 경우 다음 단계를 따르십시오.

(PHP 5.4)

$ brew install php54-intl

(PHP 5.5)

$ brew tap josegonzalez/php
$ brew tap homebrew/dupes
$ brew install josegonzalez/php/php55-intl
$ sudo apachectl restart

아파치를 다시 시작하십시오.


1
이것이 Windows 수정 인 것 같습니다 ;-)
Mark Fox

1
예, 저는 Windows를 사용하고 있지만 "Windows 수정"이 아니라 PHP 구성 및 작성기 업데이트 수정입니다. Linux 또는 Mac 상자에서도 동일한 단계를 수행해야 할 수 있습니다.
Layton Everson 2013 년

옳은. 아마도 그때 사용하고있는 php / apache 배포판을 언급해야 할 것입니다. 귀하의 경우에는 intl 확장이 번들로 제공되고 활성화 만하면됩니다. 이는 동일한 배포판 패키지를 사용하는 모든 사람에게 좋은 소식입니다.
Mark Fox

1
좋은 지적 마크 폭스. 여기 우리는 그것을 필요로하는 모든 사람을위한 것입니다. Windows 8 상자에서 apachefriends의 XAMPP 스택을 사용하고 있습니다. (버전 1.8)
Layton Everson 2013 년

1
나를 위해 이것은 XAMPP를 사용하여 수정했습니다. 확장 이미 사용할 수 있지만 [국제] intl.default_locale = en_utf8 intl.error_level = E_WARNING 추가 한 후에서만 일했다
D0001

5

더 나은 해결책은 composer.json을 프로덕션 서버에 필요한 버전으로 수정하는 것입니다. 먼저 서버의 ICU 버전을 확인합니다. 1 2

$ php -i | grep ICU
ICU version => 4.2.1

그런 다음 composer.json 파일의 Icu 구성 요소를 일치하는 버전으로 수정합니다.

"require: {
    "symfony/icu": "1.1.*"
}

서버에 intl 확장이 설치되어 있지 않으면 버전을 "1.0"으로 설정하십시오 . "1.1. "서버가 ICU 4.2 이하로 컴파일 된 경우.

마지막으로

php composer.phar update symfony/icu

개발 컴퓨터에서 광범위하게 테스트하고 다시 배포하십시오. 이제 종속성 설치가 성공합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.