ปัญหาเกี่ยวกับการพึ่งพา lib-icu เมื่อติดตั้ง Symfony 2.3.x ผ่าน Composer


112

ฉันไม่มีปัญหาในการติดตั้ง Symfony 2.2.x โดยใช้ Composer ฉันเพิ่งคัดลอกเวอร์ชันเสถียรที่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 :

ขั้นตอนของฉัน:

  • ติดตั้งส่วนขยายสนามบินนานาชาติ (ดูแลโดย PECL): $ pear install pecl/intl- คุณอาจต้องเพิ่มช่อง pecl ในลูกแพร์ก่อน
  • ถ้าคุณใช้ MAMPและไม่เคยทำงานร่วมกับลูกแพร์ / PECL ตรวจสอบโพสต์บล็อกของ lullabot ประโยชน์ ; MAMP ไม่ได้มาพร้อมกับแหล่งที่มา php ดังนั้นคุณต้องดาวน์โหลดซอร์สสำหรับเวอร์ชัน php ของคุณและย้ายซอร์สไปที่/Applications/MAMP/bin/php/php[version]/include/php(ตามที่กล่าวไว้ในบล็อกโพสต์)
  • PEAR ไม่พบ php.ini ของฉันดังนั้นฉันจึงต้องเพิ่มextension=intl.sophp.ini ด้วยตนเอง ใน MAMP คุณสามารถแก้ไข php.ini ได้อย่างง่ายดายโดยไปที่ File> Edit Template> php. [version] .ini

บรรทัดคำสั่ง:

  • เมื่อใช้ Composer หรือ Console CLI ของ Symfony คุณจะต้องใช้ Intl ด้วยและเนื่องจากphpCLI มักจะใช้php.iniคำสั่งอื่นคุณจึงต้องการเพิ่มคำสั่งส่วนขยายที่นั่นด้วย ในการค้นหา php.ini ของ CLI ของคุณเพียงแค่$ php -i |grep php\.iniค้นหาเส้นทางของไฟล์และเพิ่มลงextension=intl.soใน php.ini นั้นด้วย
  • หากต้องการตรวจสอบว่ามีการติดตั้ง Intl หรือไม่คุณสามารถ$ php -mตรวจสอบโมดูลที่มีได้

คุณใช้ระบบปฏิบัติการใด จากนั้นฉันสามารถให้ข้อมูลเกี่ยวกับวิธีอัปเดตส่วนขยาย intl ของคุณ
Nicolai Fröhlich

อย่าใช้ pecl / intl เนื่องจากใช้งานร่วมกับ PHP 5.2.x ได้ ในขณะที่ 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จากเทอร์มินัลของคุณว่าเปิดใช้งานส่วนขยายสำเร็จหรือไม่

ตรวจสอบเวอร์ชัน intl ปัจจุบันของคุณจาก php ด้วย:

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

ความสนใจ: ไม่ต้องการอีกต่อไป ( symfony 2.3 ได้รับการเผยแพร่ในขณะนี้ )

เพิ่มค่าสถานะความเสถียรขั้นต่ำ @dev หรือ @rc ให้กับการอ้างอิงของคุณเช่นนี้โปรด:

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

ความเสถียรเริ่มต้นในนักแต่งเพลงมีความเสถียรซึ่งตอนนี้สาขา symfony 2.3 ยังไม่มี (คือ @rc) อ่านเพิ่มเติมธงเสถียรภาพที่นี่


บทความที่ดี เอกสารประกอบนักแต่งเพลงทำให้ฉันน้อยกว่าที่จะแน่ใจว่าจะเกิดอะไรขึ้นหากมีสิ่งใดที่ธงเสถียรภาพเข้ามามีบทบาท
Mark Fox

ฉันติดตั้ง php-intl ผ่าน PEAR / PECL ด้วยเหตุผลบางประการINTL::…ล้มเหลว แต่ฉันสามารถดูผ่าน phpinfo () ในเบราว์เซอร์ที่ติดตั้ง Intl และ ICU เวอร์ชัน 49.x อย่างไรก็ตามนักแต่งเพลงยังคงล้มเหลวด้วยข้อความแสดงข้อผิดพลาดเดียวกัน
Mark Fox

ระบบปฏิบัติการใด "sudo aptitude install php5-intl" บน ubuntu เป็นต้น เปิดใช้งานส่วนขยายใน php.ini มองเห็นได้ด้วย php -m จาก commandline?
Nicolai Fröhlich

1
Mac OSX 10.7.5 - เมื่อฉันเรียกใช้php -mฉันไม่เห็น intl ฉันรู้ว่ามันใช้งานได้บนเว็บเซิร์ฟเวอร์ แต่ไม่รู้จักใน Command Line ดังนั้น…ฉันต้องเพิ่มใน Command Line?
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 อาจพยายามติดตั้ง symfony / icu ~ 1.2 ซึ่งจะทำให้คุณต้องติดตั้ง php-intl

เนื้อหานี้ครอบคลุมอย่างชัดเจนยิ่งขึ้นในเอกสารของ Symfony Intl Componentภายใต้ "ICU and Deployment Problems"


1
ขอบคุณสำหรับสิ่งนี้. เป็นเรื่องไร้สาระที่ Symfony2 ปิดการติดตั้งโดยใช้คุณลักษณะที่ควรเป็นทางเลือกและไม่ได้ติดตั้งในหลายสภาพแวดล้อม
Acyra

ขออภัยที่ไม่เป็นความจริง การติดตั้ง symfony 2.3 จะพิจารณาการกำหนดค่าและจะกำหนดส่วนประกอบ icu ที่ถูกต้อง มันจะไม่ปิดลง
tweini

POC composer.json: "require":{"symfony/symfony": "v2.3.3"}}ผลลัพธ์: ´กำลังโหลดที่เก็บของนักแต่งเพลงพร้อมข้อมูลแพ็คเกจการติดตั้งการอ้างอิง (รวมถึงต้องใช้ - dev) - การติดตั้ง psr / log (1.0.0) การดาวน์โหลด: 100% - การติดตั้ง twig / twig (v1.13.2) การดาวน์โหลด: 100% - การติดตั้งหลักคำสอน / ทั่วไป (2.3.0) การดาวน์โหลด: 100% - การติดตั้ง symfony / symfony (v2.3.3) การดาวน์โหลด: 100% - การติดตั้ง symfony / icu (v1.0.0) การดาวน์โหลด: 100% การเขียนไฟล์ล็อคการสร้างไฟล์ autoload
tweini

1
ตามที่อธิบายไว้ในเอกสารปัญหาเกิดขึ้นเมื่อcomposer.lockมีการแชร์ระหว่างสภาพแวดล้อมที่มี Intl เวอร์ชันต่างๆ (หรือไม่มีอยู่)
Tamlyn

ขอบคุณสำหรับสิ่งนี้! ข้ามนิ้วของฉันฉันสามารถทำให้โครงการ Symfony2 ของฉันทำงานสำหรับลูกค้าที่ยังอยู่ใน GoDaddy
Matt

15

คุณสามารถดูวิธีแก้ไขปัญหานี้หรือปัญหาที่คล้ายกันได้ที่นี่: ปัญหา ICU และการปรับใช้

พฤติกรรมของนักแต่งเพลงควรฉลาดในการเลือกส่วนประกอบ icu ที่เหมาะสม:

  • symfony / icu 1.0. *: เมื่อไม่มีส่วนขยาย intl
  • symfony / icu 1.1. *: เมื่อ intl ถูกคอมไพล์ด้วย ICU 4.0 หรือสูงกว่า
  • symfony / icu 1.2. *: เมื่อ intl ถูกคอมไพล์ด้วย ICU 4.4 หรือสูงกว่า

ไม่ควรมี (ในทางทฤษฎี) ไม่มีข้อผิดพลาดในการติดตั้ง symfony 2.3 โดยไม่มีส่วนขยาย intl

แต่คุณสามารถติดกับดักได้เมื่อสภาพแวดล้อมการพัฒนาของคุณแตกต่างจากเซิร์ฟเวอร์ที่ใช้งานจริงดังที่กล่าวไว้ในบทความนี้:

  • เครื่องพัฒนาถูกคอมไพล์ด้วย ICU 4.4 หรือสูงกว่า แต่เซิร์ฟเวอร์ถูกคอมไพล์> ด้วย ICU เวอร์ชันต่ำกว่า 4.4
  • ส่วนขยาย intl มีอยู่ในเครื่องพัฒนา แต่ไม่มีบนเซิร์ฟเวอร์

เมื่อคุณไม่มีสิทธิ์เข้าถึงรูทไปยังเซิร์ฟเวอร์การผลิตของคุณคุณสามารถแก้ไขได้ตามที่กล่าวไว้ในบทความนี้ (ปรับแต่ง comper.json)

หวังว่าข้อมูลเพิ่มเติมนี้จะช่วยฉันได้ในกรณีพิเศษที่มีสภาพแวดล้อมที่แตกต่างกัน


9

Mac OS Mavericks มาพร้อมกับ PHP 5.4.17 โดยไม่มี intl ในการรับสิ่งนี้คุณจะต้องทำตามขั้นตอนเหล่านี้:

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

ฉันรู้ว่าคำตอบนี้อาจไม่ใช่คำตอบที่ถูกต้องสำหรับปัญหาของบุคคลนี้ แต่เป็นการแก้ปัญหาของฉันด้วยชื่อเรื่องเดียวกัน ฉันสามารถแก้ไขปัญหานี้ด้วยตัวเองโดยเปิดใช้งานส่วนขยาย intl ใน php.ini และอัปเกรดตัวแต่ง

กำลังอัพเกรดนักแต่งเพลง

php composer.phar self-update

ลบความคิดเห็นออกจากบรรทัดนี้ (ใน php.ini):

extension=php_intl.dll

และลบความคิดเห็นของสองบรรทัดด้านล่าง [intl] ใน (php.ini):

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

และรีสตาร์ท apache2 แน่นอน :)

ข้อมูลเพิ่มเติม:

หากคุณใช้ mac และติดตั้ง php ด้วย Homebrew ให้ทำตามขั้นตอนเหล่านี้:

(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


1
ดูเหมือนว่านี่คือการแก้ไขของ Windows ;-)
Mark Fox

1
ใช่ฉันใช้ windows แต่มันไม่ใช่ "windows fix" แต่เป็นการแก้ไข php config และ composer update ขั้นตอนเดียวกันอาจต้องดำเนินการในกล่อง linux หรือ mac
Layton Everson

แก้ไข. บางทีคุณควรพูดถึงการกระจาย php / apache ที่คุณใช้อยู่ ในกรณีของคุณมีการรวมส่วนขยาย intl และจำเป็นต้องเปิดใช้งานนั่นเป็นข่าวดีสำหรับทุกคนที่ใช้แพ็คเกจ distro เดียวกัน
Mark Fox

1
จุดดี Mark Fox ที่นี่เราเหมาะสำหรับทุกคนที่ต้องการ ฉันใช้ XAMPP stack จาก apachefriends บนกล่อง windows 8 (รุ่น 1.8)
Layton Everson

1
สำหรับฉันสิ่งนี้แก้ไขโดยใช้ XAMPP เปิดใช้งานส่วนขยายแล้ว แต่จะใช้งานได้หลังจากเพิ่ม [intl] 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

จากนั้นแก้ไขคอมโพเนนต์ Icu ในไฟล์ composer.json ของคุณให้เป็นเวอร์ชันที่ตรงกัน:

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

ตั้งค่าเวอร์ชันเป็น "1.0 " หากเซิร์ฟเวอร์ไม่ได้ติดตั้งส่วนขยาย intl "1.1. " หากเซิร์ฟเวอร์คอมไพล์ด้วย ICU 4.2 หรือต่ำกว่า

สุดท้ายเรียกใช้

php composer.phar update symfony/icu

บนเครื่องพัฒนาของคุณทดสอบอย่างครอบคลุมและปรับใช้อีกครั้ง การติดตั้งการอ้างอิงจะประสบความสำเร็จ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.