परिचय: जब PHP Homebrew के साथ काम करना बंद कर देता है
\n\nक्या आपने कभी ऐसी स्थिति का सामना किया है जहाँ सब कुछ पूरी तरह से काम कर रहा था, और फिर — बम! — और आपकी पसंदीदा PHP स्क्रिप्ट एक ऐसी त्रुटि देती है जिससे बाल खड़े हो जाते हैं? यदि आप macOS पर डेवलपर हैं और हाल ही में Homebrew के माध्यम से Node.js स्थापित किया है, तो आपने शायद यह भयानक संदेश देखा होगा:
\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\nlibicui18n.62.dylib त्रुटि क्यों होती है?
\n\nआइए तंत्र को समझते हैं। ICU4C — यह Unicode समर्थन के लिए एक लाइब्रेरी है, जिसका उपयोग PHP अंतर्राष्ट्रीयकरण (जैसे intl, mbstring और अन्य फ़ंक्शन) के लिए करता है। जब आप Homebrew के माध्यम से PHP स्थापित करते हैं, तो यह ICU4C के एक विशिष्ट संस्करण से जुड़ जाता है जो स्थापना के समय मौजूद था।
समस्या तब उत्पन्न होती है जब आप Brew के माध्यम से Node.js स्थापित (या अपडेट) करते हैं। 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: Brew के माध्यम से PHP को पुनः स्थापित करना (अनुशंसित)
\n\nअधिक सही दृष्टिकोण — PHP को ICU4C के वर्तमान संस्करण के साथ पुनः संकलित करने के लिए बाध्य करना है। इसमें थोड़ा अधिक समय लगेगा, लेकिन यह समस्या को जड़ से हल कर देगा।
\n\n- \n
- पहले PHP का वर्तमान संस्करण हटाएं (यदि कोई है): \n
brew uninstall php\n\n- \n
- फिर PHP को पुनः स्थापित करें, स्पष्ट रूप से निर्दिष्ट करते हुए कि ICU4C के वर्तमान संस्करण का उपयोग करना है: \n
brew install php\n\nHomebrew स्वचालित रूप से ICU4C का नवीनतम संस्करण लाएगा और PHP को सही लिंक के साथ पुनः संकलित करेगा। स्थापना के बाद जाँचें:
\n\nphp -v\nphp -m | grep intl\n\nमॉड्यूल intl सूची में होना चाहिए। यदि नहीं है — तो संभवतः इसे php.ini में मैन्युअल रूप से सक्षम करने की आवश्यकता हो सकती है, लेकिन आमतौर पर Brew ऐसा स्वचालित रूप से करता है।