Composer aracılığıyla Symfony 2.3.x'i yüklerken lib-icu bağımlılığıyla ilgili sorunlar


112

Composer kullanarak Symfony 2.2.x'i kurarken hiçbir sorun yaşamadım, sadece kararlı sürümü http://symfony.com/download adresinde kopyaladım .

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

(Composer'ı global olarak kurdum)
2.3.0-RC1'i merak ediyorum Bunun sorunsuz olacağını düşündüm:

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

Ancak aşağıdaki hatalardan dolayı kapatıldı:

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 dosyasında ince ayar yapmam gerekir mi?


Çözüm Güncellemesi

Ben eksikti php intl uzantısını sağlar lib-icu

Çok kolay, uluslararası uzantıyı kurun ve yapılandırın. PHP 5.3'ten itibaren, Intl uzantısı varsayılan olarak dağıtılır, ancak MAMP gibi bazı dağıtımlarda Intl yoktur, bu yüzden onu edinmeniz gerekir. PEAR kullandım :

Adımlarım:

  • Intl uzantısını kurun (PECL tarafından sağlanır): $ pear install pecl/intl- önce pear'a pecl kanalını eklemeniz gerekebilir.
  • MAMP kullanıyorsanız ve pear / pecl ile hiç çalışmadıysanız, lullabot'un yararlı blog gönderisini kontrol edin ; MAMP, php kaynağıyla birlikte gelmez, bu nedenle php sürümünüzün kaynağını indirmeniz ve kaynağı içine taşımanız gerekir /Applications/MAMP/bin/php/php[version]/include/php(blog gönderisinde anlatıldığı gibi)
  • PEAR php.ini'mi bulamadı, bu yüzden php.ini'ye manuel olarak eklemek zorunda kaldım extension=intl.so. MAMP'ta Dosya> Şablonu Düzenle> php. [Sürüm] .ini'ye giderek php.ini'yi kolayca düzenleyebilirsiniz.

Komut satırı:

  • Composer veya Symfony's Console CLI'yi kullanırken ayrıca Intl'ye ihtiyacınız olacak ve phpCLI genellikle farklı bir tane kullandığından php.ini, uzantı yönergesini oraya da eklemek isteyeceksiniz. CLI'nizin php.ini'sini bulmak için $ php -i |grep php\.inidosya yolunu keşfetmeniz ve extension=intl.soo php.ini'ye eklemeniz yeterlidir .
  • Intl'nin kurulu olup olmadığını $ php -mkontrol etmek için mevcut modülleri kontrol edebilirsiniz .

hangi işletim sistemini kullanıyorsun? daha sonra uluslararası uzantınızı nasıl güncelleyeceğiniz konusunda bilgi sağlayabilirim.
Nicolai Fröhlich

PHP 5.2.x uyumluluğu için olduğu için pecl / intl kullanmayın. PHP 5.3 itibariyle, Intl bir çekirdek eklentidir.
Jérôme Vieilledent

2
@ JérômeVieilledent, görünen o ki, mevcut MAMP dağıtımı Intl'yi paketlemiyor, bu da size sadece onu oluşturmak için PECL kullanma seçeneğini bırakıyor php.net/manual/en/intl.installation.php
Mark Fox

Yanıtlar:


118

php-intl uzantınızı güncelleyin , icu hatası buradan gelir!

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

php.ini içinde uzantının etkin ve düzgün şekilde yapılandırılmış olduğunu kontrol edin.

(ipucu: php-cli bazen farklı bir php.ini kullanır)

php.ini

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

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

kontrol ettiğini phpinfo()VE php -muzatma başarıyla devreye alınması şartıyla senin bilgisayarından.

Mevcut uluslararası sürümlerinizi php'den kontrol edin:

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

dikkat: artık gerekli değil ( bu arada symfony 2.3 yayınlandı )

Aşağıdaki gibi bağımlılığınıza minimum kararlılık bayrağı @dev veya @rc ekleyin:

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

Composer'daki öntanımlı kararlılık, şu anda symfony 2.3 dalının olmadığı sabittir (@rc'dir). Burada daha fazla istikrar bayrakları okuyun .


Harika makale. Composer dokümantasyonu bana kesinlikten daha az şey bıraktı, eğer herhangi bir şey olursa olsun, istikrar bayrağı devreye giriyordu.
Mark Fox

Php-intl'yi PEAR / PECL üzerinden kurdum. Nedense INTL::…başarısız olur. Ancak tarayıcıda phpinfo () aracılığıyla Intl'nin kurulu olduğunu ve ICU sürümünün 49.x olduğunu görebiliyorum. Ancak Composer yine de aynı hata mesajıyla başarısız oluyor.
Mark Fox

hangi işletim sistemi? Örneğin ubuntu üzerinde "sudo aptitude install php5-intl". uzantısı php.ini'de etkinleştirildi, komut satırından php -m ile görülebilir mi?
Nicolai Fröhlich

1
Mac OSX 10.7.5 - çalıştırdığımda php -mintl. Web sunucusunda çalıştığını biliyorum, ancak Komut Satırında tanınmıyor. Yani… Komut Satırına eklemem gerekiyor?
Mark Fox

Homebrew aracılığıyla yükledim, ancak php -myine de CLI'den tanımıyor mu?
Mark Fox

21

Çoğu uygulama yalnızca "en" yerel ayarını destekleyecek ve çeviri yeteneklerine veya php-intl'ye ihtiyaç duymayacaktır. Eğer bu sizseniz veya sunucunuza php-intl yükleyemiyorsanız, açık bir şekilde symfony / icu ~ 1.0'ı composer.json. 1.0 php-intl gerektirmezken 1.1+ gerektirir.

Çeviri özelliklerine ihtiyacınız yoksa:

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

Bu bildirim olmadan ve symfony / symfony 2.3 Composer, php-intl kurmanızı gerektiren symfony / icu ~ 1.2'yi kurmaya çalışabilir.

Bu, Symfony Intl Bileşeninin belgelerinde "ICU ve Dağıtım Sorunları" altında daha kapsamlı bir şekilde ele alınmıştır .


1
Bunun için teşekkürler. Symfony2'nin isteğe bağlı olması gereken ve birçok ortamda kurulu olmayan bir özellik nedeniyle kurulumu kapatması saçmadır.
Acyra

Üzgünüm ama bu doğru değil. Symfony 2.3'ün yüklenmesi, yapılandırmanın içini inceleyecek ve doğru icu bileşenini belirleyecektir. KAPANMAZ.
tweini

POC composer.json: "require":{"symfony/symfony": "v2.3.3"}}sonuç: ´Paket bilgileriyle compositoreyyyyyyyyyyyyyyyyyyy (Requ-dev dahil) - psr / log'u kurma (1.0.0) Downloading: 100% - twig / twig kurma (v1.13.2) Downloading: 100% - Doctrine / common (2.3.0) yükleniyor İndiriliyor:% 100 - symfony / symfony yükleniyor (v2.3.3) İndiriliyor:% 100 - symfony / icu yükleniyor (v1.0.0) İndiriliyor:% 100 Kilit dosyası
yazılıyor Otomatik yükleme

1
Dokümanlarda açıklandığı gibi, sorun, Intl'nin composer.lockfarklı sürümlerine (veya yokluğuna) sahip ortamlar arasında paylaşıldığında ortaya çıkar .
Tamlyn

Bunun için teşekkürler! Parmaklarımın arasından Symfony2 projemi hala GoDaddy'de olan bir müşteri için çalıştırabiliyorum
Matt

15

Bu veya benzeri sorunlarla ilgili bir çözüm burada bulunabilir: YBÜ ve Dağıtım Sorunları

Bestecinin davranışı, doğru ICU bileşenini seçerek akıllı olmalıdır:

  • symfony / icu 1.0. *: intl uzantısı mevcut olmadığında
  • symfony / icu 1.1. *: intl, ICU 4.0 veya üstü ile derlendiğinde
  • symfony / icu 1.2. *: intl, ICU 4.4 veya üstü ile derlendiğinde

Symfony 2.3'ü kurarken (teorik olarak) hata olmamalıdır. uluslararası uzantı olmadan.

Ancak, geliştirme ortamınız bu makalede belirtildiği gibi üretim sunucunuzdan farklı olduğunda tuzağa düşebilirsiniz:

  • geliştirme makineleri ICU 4.4 veya üstü ile derlenir, ancak sunucu> 4.4'ten daha düşük bir ICU sürümü ile derlenir
  • intl uzantısı geliştirme makinelerinde mevcuttur, ancak sunucuda yoktur.

Üretim sunucunuza kök erişiminiz olmadığında, bu makalede belirtildiği gibi düzeltebilirsiniz. (composer.json ince ayarı)

Umarım bu ek bilgi, farklı ortamlarda bu özel durum için bana yardımcı olduğu için yardımcı olmuştur.


9

Mac OS Mavericks, PHP 5.4.17 ile birlikte gelir. Bunu elde etmek için şu adımları izlemeniz gerekir:

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

Bu cevabın bu kişinin problemine doğru cevap olmayabileceğini biliyorum ama aynı başlıktaki problemimin çözümü oldu. Php.ini'de intl uzantısını etkinleştirerek ve composer'ı yükselterek bu sorunu kendim çözebildim.

Besteci yükseltiliyor.

php composer.phar self-update

Bu satırdaki yorumu kaldır (php.ini içinde):

extension=php_intl.dll

Ayrıca (php.ini) içindeki [intl] altındaki bu iki satırın açıklamasını da kaldırın:

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

Ve tabii ki apache2'yi yeniden başlatın. :)

Ek bilgi:

Mac kullanıyorsanız ve Homebrew ile yüklü php kullanıyorsanız şu adımları izleyin:

(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

Apache'yi yeniden başlatın.


1
Görünüşe göre bu Windows düzeltmesi ;-)
Mark Fox

1
Evet, Windows kullanıyorum, ancak bu bir "pencere düzeltmesi" değil, bir php yapılandırması ve besteci güncelleme düzeltmesi. Linux veya Mac kutusunda aynı adımların atılması gerekebilir.
Layton Everson

Doğru. Belki o zaman hangi php / apache dağıtımını kullandığınızı belirtmelisiniz. Sizin durumunuzda, intl uzantısı paketlenmiştir ve yalnızca etkinleştirilmesi gerekir, bu aynı dağıtım paketini kullanan herkes için harika bir haber.
Mark Fox

1
İyi nokta Mark Fox. İşte ihtiyacı olan herkes için buradayız. Apachefriends'in XAMPP yığınını Windows 8 kutusunda kullanıyorum. (sürüm 1.8)
Layton Everson

1
Benim için bu, XAMPP kullanarak düzeltti. Uzantı zaten etkinleştirildi, ancak yalnızca [intl] intl.default_locale = en_utf8 intl.error_level = E_WARNING
d0001

5

Daha iyi bir çözüm, composer.json dosyanızı üretim sunucusunun gerektirdiği sürüme sabitlemektir. İlk olarak, sunucudaki yoğun bakım sürümünü belirleyin: 1 2

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

Ardından composer.json dosyanızdaki Icu bileşenini eşleşen bir sürüme sabitleyin:

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

Sunucuda intl uzantısı yüklü değilse sürümü "1.0. " Olarak ayarlayın ; Sunucu ICU 4.2 veya daha düşük bir sürümle derlenmişse "1.1. "

Sonunda koş

php composer.phar update symfony/icu

geliştirme makinenizde kapsamlı bir şekilde test edin ve yeniden devreye alın. Bağımlılıkların kurulumu şimdi başarılı olacaktır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.