مقدمة: عندما يتوقف PHP عن التعاون مع Homebrew
\n\nهل سبق لك أن واجهت موقفًا حيث كان كل شيء يعمل بشكل مثالي، ثم فجأة! يتسبب نص PHP المفضل لديك في ظهور خطأ يجعلك تشعر بالذعر؟ إذا كنت مطورًا على macOS وقمت مؤخرًا بتثبيت Node.js عبر Homebrew، فمن المحتمل أنك رأيت هذه الرسالة المخيفة:
\n\ndyld: Library not loaded: /usr/local/opt/icu4c/lib/libicui18n.62.dylib\n Referenced from: /usr/local/bin/php\n Reason: image not found\n\nلا داعي للذعر! هذه ليست نهاية العالم، بل مجرد تعارض في إصدارات مكتبة ICU4C (International Components for Unicode for C). هذا الموقف شائع جدًا لدرجة أن هذا السؤال حصد آلاف المشاهدات على Stack Overflow. اليوم سنفهم لماذا يحدث هذا، والأهم من ذلك، كيفية إصلاحه نهائيًا.
\n\nلماذا يحدث خطأ libicui18n.62.dylib؟
\n\nدعنا نفهم الآلية. ICU4C هي مكتبة لدعم Unicode، يستخدمها PHP للعمل مع التدويل (وظائف مثل intl و mbstring وغيرها). عندما تقوم بتثبيت PHP عبر Homebrew، فإنه يرتبط بإصدار معين من ICU4C كان ساريًا وقت التثبيت.
تنشأ المشكلة عندما تقوم بتثبيت (أو تحديث) Node.js عبر Brew. يعتمد Node.js أيضًا على ICU4C، وقد يقوم Brew بتحديث هذه المكتبة إلى إصدار جديد، مع حذف الإصدار القديم. نتيجة لذلك، يظل PHP مع "رابط ميت" للملف libicui18n.62.dylib الذي لم يعد موجودًا. ومن هنا يأتي الخطأ:
dyld: Library not loaded: /usr/local/opt/icu4c/lib/libicui18n.62.dylib\n\n
في جوهره، هذا تعارض كلاسيكي في التبعيات. لكن الخبر السار: هناك حل، وهو بسيط جدًا.
\n\nطرق الحل: من البسيط إلى الموثوق
\n\nالطريقة 1: إعادة ربط ICU4C (إصلاح سريع)
\n\nأسرع طريقة هي "تذكير" PHP بمكان المكتبة الآن. يقوم Homebrew بتخزين الإصدار الحالي من ICU4C في مكان آخر، لكن يمكننا إنشاء رابط رمزي.
\n\n- \n
- أولاً، تعرف على إصدار ICU4C المثبت حاليًا: \n
brew list --versions icu4c\n\nسترى شيئًا مثل icu4c 72.1 (قد يختلف رقم الإصدار).
- \n
- الآن، لننشئ الدليل الذي يبحث عنه PHP، وننشئ رابطًا رمزيًا: \n
sudo mkdir -p /usr/local/opt/icu4c/lib\nsudo ln -s /usr/local/Cellar/icu4c/72.1/lib/libicui18n.dylib /usr/local/opt/icu4c/lib/libicui18n.62.dylib\n\nهام: استبدل 72.1 بإصدار ICU4C الخاص بك. إذا كان الإصدار 73.0، فستكون الأمر كالتالي:
sudo ln -s /usr/local/Cellar/icu4c/73.0/lib/libicui18n.dylib /usr/local/opt/icu4c/lib/libicui18n.62.dylib\n\nتحقق من عمل PHP:
\n\nphp -v\n\nإذا رأيت إصدار PHP بدون أخطاء - تهانينا، لقد نجحت! لكن هذا حل مؤقت. عند التحديث التالي لـ ICU4C، سينكسر الرابط مرة أخرى.
\n\nالطريقة 2: إعادة تثبيت PHP عبر Brew (موصى به)
\n\nالنهج الأكثر صحة هو إجبار PHP على إعادة البناء مع الإصدار الحالي من ICU4C. سيستغرق هذا وقتًا أطول قليلاً، لكنه سيحل المشكلة من جذورها.
\n\n- \n
- أولاً، قم بإزالة الإصدار الحالي من PHP (إذا كان موجودًا): \n
brew uninstall php\n\n- \n
- ثم أعد تثبيت PHP، مع الإشارة صراحةً إلى استخدام الإصدار الحالي من ICU4C: \n
brew install php\n\nسيقوم Homebrew بسحب أحدث إصدار من ICU4C وإعادة بناء PHP مع الروابط الصحيحة. بعد التثبيت، تحقق:
\n\nphp -v\nphp -m | grep intl\n\nيجب أن تكون الوحدة intl في القائمة. إذا لم تكن كذلك - قد تحتاج إلى تمكينها يدويًا في php.ini، لكن عادةً ما يقوم Brew بذلك تلقائيًا.