Các vấn đề với sự phụ thuộc lib-icu khi cài đặt Symfony 2.3.x qua Composer


112

Tôi không gặp vấn đề gì khi cài đặt Symfony 2.2.x bằng Composer, tôi luôn sao chép phiên bản ổn định tại http://symfony.com/download .

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

(Tôi đã cài đặt Composer trên toàn cầu)
Tò mò về 2.3.0-RC1, tôi nghĩ rằng điều này sẽ diễn ra suôn sẻ:

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

Nhưng đã tắt máy do các lỗi sau:

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

Tôi có cần chỉnh sửa tệp composer.json không?


Cập nhật giải pháp

Tôi đã thiếu phần mở rộng php intl cung cấp lib-icu

Thật dễ dàng, hãy cài đặt và cấu hình phần mở rộng intl. Kể từ PHP 5.3, phần mở rộng Intl được phân phối theo mặc định, nhưng một số bản phân phối, như MAMP, không có Intl, vì vậy bạn sẽ cần phải có được nó. Tôi đã sử dụng PEAR :

Các bước của tôi:

  • Cài đặt tiện ích mở rộng Intl (do PECL duy trì): $ pear install pecl/intl- bạn có thể phải thêm kênh pecl vào lê trước.
  • Nếu bạn sử dụng MAMP và chưa bao giờ làm việc với lê / pecl, hãy kiểm tra bài đăng trên blog hữu ích của lullabot ; MAMP không đi kèm với nguồn php, vì vậy bạn phải tải xuống nguồn cho phiên bản php của mình và chuyển nguồn vào /Applications/MAMP/bin/php/php[version]/include/php(như được đề cập trong bài đăng trên blog)
  • PEAR không thể tìm thấy php.ini của tôi, vì vậy tôi phải thêm extension=intl.sovào php.ini theo cách thủ công . Trong MAMP, bạn có thể chỉnh sửa php.ini dễ dàng bằng cách đi tới Tệp> Chỉnh sửa Mẫu> php. [Phiên bản] .ini

Dòng lệnh:

  • Khi sử dụng CLI của Composer hoặc Console của Symfony, bạn cũng sẽ cần Intl và vì phpCLI thường sử dụng một thứ khác php.ininên bạn cũng muốn thêm chỉ thị mở rộng vào đó. Để tìm php.ini của CLI, bạn chỉ cần $ php -i |grep php\.inikhám phá đường dẫn tệp và thêm extension=intl.sovào php.ini đó.
  • Để kiểm tra xem Intl đã được cài đặt hay chưa, bạn có thể $ php -mkiểm tra các mô-đun có sẵn.

bạn đang sử dụng hệ điều hành nào? thì tôi có thể cung cấp thông tin về cách cập nhật tiện ích mở rộng intl của bạn.
Nicolai Fröhlich

Không sử dụng pecl / intl vì nó tương thích với PHP 5.2.x. Kể từ PHP 5.3, Intl là một phần mở rộng cốt lõi.
Jérôme Vieilledent

2
@ JérômeVieilledent có vẻ như bản phân phối MAMP hiện tại không gói Intl mà chỉ để lại cho bạn tùy chọn sử dụng PECL để xây dựng php.net/manual/en/intl.installation.php
Mark Fox

Câu trả lời:


118

cập nhật phần mở rộng php-intl của bạn , đó là nguyên nhân của lỗi icu!

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

kiểm tra xem tiện ích mở rộng đã được kích hoạt và được định cấu hình đúng trong php.ini hay chưa.

(gợi ý: php-cli đôi khi sử dụng một php.ini khác)

php.ini

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

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

kiểm tra phpinfo()AND của bạn php -mtừ thiết bị đầu cuối của bạn nếu tiện ích mở rộng đã được bật thành công.

Kiểm tra các phiên bản intl hiện tại của bạn từ php bằng:

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

chú ý: không cần thiết nữa ( symfony 2.3 đã được phát hành )

Vui lòng thêm cờ ổn định tối thiểu @dev hoặc @rc vào phần phụ thuộc của bạn như sau:

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

Tính năng ổn định mặc định trong trình soạn nhạc là ổn định mà nhánh symfony 2.3 hiện không có (đó là @rc). Đọc thêm cờ ổn định tại đây .


Bài báo tuyệt vời. Tài liệu về Nhà soạn nhạc khiến tôi không chắc chắn về điều gì nếu cờ ổn định có hiệu lực.
Mark Fox

Tôi đã cài đặt php-intl qua PEAR / PECL. Vì lý do nào đó INTL::…không thành công. Tuy nhiên, tôi có thể thấy thông qua phpinfo () trong trình duyệt rằng Intl đã được cài đặt và phiên bản ICU là 49.x. Tuy nhiên, Composer vẫn bị lỗi với cùng một thông báo lỗi.
Mark Fox

hệ điều hành nào? "sudo aptitude install php5-intl" trên ubuntu chẳng hạn. đã bật tiện ích mở rộng trong php.ini, hiển thị với php -m từ dòng lệnh?
Nicolai Fröhlich

1
Mac OSX 10.7.5 - khi chạy php -mtôi KHÔNG thấy intl. Tôi biết nó hoạt động trên máy chủ web, nhưng nó không được nhận dạng trên Dòng lệnh. Vì vậy ... tôi phải thêm nó vào Dòng lệnh?
Mark Fox

Tôi đã cài đặt qua Homebrew, nhưng php -mvẫn không nhận ra từ CLI?
Mark Fox

21

Nhiều ứng dụng sẽ chỉ hỗ trợ ngôn ngữ "en" và sẽ không cần khả năng dịch thuật hoặc php-intl. Nếu đây là bạn hoặc bạn không thể cài đặt php-intl trên máy chủ của mình, bạn có thể thêm symfony / icu ~ 1.0 vào máy chủ của mình composer.json. 1.0 không yêu cầu php-intl, trong khi 1.1+ thì có.

Nếu bạn không cần tính năng dịch:

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

Nếu không có phần khai báo này và cố gắng cài đặt symfony / symfony 2.3 Composer có thể cố gắng cài đặt symfony / icu ~ 1.2 yêu cầu bạn cài đặt php-intl.

Điều này rõ ràng được đề cập rộng rãi hơn trong tài liệu của Symfony Intl Component trong "ICU và Các vấn đề về Triển khai".


1
Cảm ơn vì điều đó. Thật vô lý khi Symfony2 tắt cài đặt trên một tính năng nên là tùy chọn và không được cài đặt trong nhiều môi trường.
Acyra

Xin lỗi, nhưng đó không phải là sự thật. Việc cài đặt symfony 2.3 sẽ tìm hiểu kỹ cấu hình và sẽ xác định đúng thành phần icu. Nó sẽ KHÔNG tắt.
tweini

POC composer.json: "require":{"symfony/symfony": "v2.3.3"}}result: ´Tải các kho lưu trữ trình soạn nhạc với thông tin gói Cài đặt các phụ thuộc (bao gồm cả request-dev) - Cài đặt psr / log (1.0.0) Tải xuống: 100% - Cài đặt twig / twig (v1.13.2) Tải xuống: 100% - Cài đặt symfony / common (2.3.0) Tải xuống: 100% - Cài đặt symfony / symfony (v2.3.3) Tải xuống: 100% - Cài đặt symfony / icu (v1.0.0) Tải xuống: 100% Viết tệp khóa Tạo tệp tự động tải
tweini

1
Như đã giải thích trong tài liệu, vấn đề nảy sinh khi composer.lockđược chia sẻ giữa các môi trường có các phiên bản khác nhau (hoặc không có) của Intl.
Tamlyn

Cảm ơn vì điều đó! Vượt qua những ngón tay của tôi, tôi có thể nhận được Symfony2 tôi dự án chạy cho một khách hàng là trên GoDaddy vẫn
Matt

15

Bạn có thể tìm thấy giải pháp liên quan đến vấn đề này hoặc các vấn đề tương tự tại đây: ICU và Các vấn đề triển khai

Hành vi của nhà soạn nhạc phải thông minh khi chọn đúng thành phần icu:

  • symfony / icu 1.0. *: khi phần mở rộng intl không khả dụng
  • symfony / icu 1.1. *: khi intl được biên dịch với ICU 4.0 trở lên
  • symfony / icu 1.2. *: khi intl được biên dịch với ICU 4.4 trở lên

Về mặt lý thuyết, không có lỗi khi cài đặt symfony 2.3. không có phần mở rộng intl.

Nhưng bạn có thể bị mắc kẹt khi môi trường phát triển của bạn khác với máy chủ sản xuất của bạn như được đề cập trong bài viết này:

  • máy phát triển được biên dịch với ICU 4.4 trở lên, nhưng máy chủ được biên dịch> với phiên bản ICU thấp hơn 4.4
  • phần mở rộng intl có sẵn trên máy phát triển nhưng không có trên máy chủ.

Khi bạn không có quyền truy cập root vào máy chủ sản xuất của mình, bạn có thể khắc phục nó như đã đề cập trong bài viết này. (chỉnh sửa composer.json)

Hy vọng thông tin bổ sung này sẽ giúp ích vì nó đã giúp tôi trong trường hợp đặc biệt này với các môi trường khác nhau.


9

Mac OS Mavericks đi kèm với PHP 5.4.17 không có intl. Để có được điều này, bạn sẽ phải làm theo các bước sau:

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

Tôi biết rằng câu trả lời này có thể không phải là câu trả lời chính xác cho vấn đề của người này, nhưng đó là giải pháp cho vấn đề của tôi với cùng tiêu đề. Tôi đã có thể tự khắc phục sự cố này bằng cách bật tiện ích mở rộng intl trong php.ini và nâng cấp trình soạn nhạc.

Đang nâng cấp trình soạn nhạc.

php composer.phar self-update

Xóa nhận xét khỏi dòng này (trong php.ini):

extension=php_intl.dll

Và cũng xóa bình luận hai dòng này bên dưới [intl] trong (php.ini):

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

Và khởi động lại apache2 tất nhiên. :)

Thông tin thêm:

Nếu bạn đang sử dụng mac và cài đặt php với Homebrew, hãy làm theo các bước sau:

(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

Khởi động lại apache.


1
Có vẻ như đây là bản sửa lỗi Windows ;-)
Mark Fox

1
Có, tôi đang sử dụng windows, tuy nhiên, nó không phải là "windows fix" mà là bản sửa lỗi cấu hình php và cập nhật composer. Các bước tương tự có thể cần được thực hiện trên hộp Linux hoặc mac.
Layton Everson

Chính xác. Có lẽ bạn nên đề cập đến bản phân phối php / apache nào bạn đang sử dụng sau đó. Trong trường hợp của bạn, phần mở rộng intl được đóng gói và chỉ cần được bật, đó là tin tuyệt vời cho bất kỳ ai sử dụng cùng một gói bản phân phối.
Mark Fox

1
Điểm tốt Mark Fox. Chúng tôi ở đây dành cho bất kỳ ai cần nó. Tôi đang sử dụng ngăn xếp XAMPP từ apachefriends trên hộp windows 8. (phiên bản 1.8)
Layton Everson

1
Đối với tôi, điều này đã sửa nó bằng cách sử dụng XAMPP. Phần mở rộng đã được kích hoạt, nhưng nó làm việc chỉ sau khi thêm [Intl] intl.default_locale = en_utf8 intl.error_level = E_WARNING
d0001

5

Giải pháp tốt hơn là sửa composer.json của bạn thành phiên bản do máy chủ sản xuất yêu cầu. Đầu tiên, xác định phiên bản ICU trên máy chủ: 1 2

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

Sau đó, sửa thành phần Icu trong tệp composer.json của bạn thành một phiên bản phù hợp:

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

Đặt phiên bản thành "1.0. " Nếu máy chủ không cài đặt phần mở rộng intl; "1.1. " Nếu máy chủ được biên dịch với ICU 4.2 hoặc thấp hơn.

Cuối cùng, chạy

php composer.phar update symfony/icu

trên máy phát triển của bạn, thử nghiệm rộng rãi và triển khai lại. Việc cài đặt các phụ thuộc bây giờ sẽ thành công.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.