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

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있는지 확인하려면 사용 가능한 모듈을 확인할 수 있습니다.


답변

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입니다). 여기 에서 안정성 플래그에 대해 자세히 알아보십시오 .


답변

많은 응용 프로그램은 “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 구성 요소의 문서 에서보다 광범위하게 다루고 있습니다 .


답변

이 문제 또는 유사한 문제에 대한 해결책은 여기에서 찾을 수 있습니다. 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)

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


답변

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.


답변

이 답변이이 사람의 문제에 대한 정답이 아닐 수도 있다는 것을 알고 있지만, 같은 제목의 문제에 대한 해결책이었습니다. 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

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


답변

더 나은 해결책은 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

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


답변