PECL कमांड त्रुटियों की लंबी सूची तैयार करता है


47

वर्तमान में CentOS 6.5 पर PHP 5.4 चल रहा है।

मैंने webtatic php55w पैकेज स्थापित किया, फिर पीईसीएल के माध्यम से रेडिस और मोंगो के साथ समस्या के बिना PEAR + PECL स्थापित किया।

कुछ ही समय बाद, मुझे एहसास हुआ कि 5.5 उस ढांचे के साथ संगत नहीं है जो मैं काम कर रहा था, इसलिए मैंने yum ने php55w को मिटा दिया और इसमें php54w को स्थापित किया।

अब pecl कमांड बिल्कुल काम नहीं करता है। यह हर बार त्रुटियों की वास्तव में लंबी स्ट्रिंग पैदा करता है जब भी मैं कोई भी pecl कमांड जारी करता हूं (संक्षिप्त ... दर्जनों बार दोहराया गया):

Warning: Invalid argument supplied for foreach() in Command.php on line 259

Warning: Invalid argument supplied for foreach() in /usr/share/pear/PEAR/Command.php on line 259

...etc etc etc...

Notice: Undefined index: honorsbaseinstall in Role.php on line 180

Notice: Undefined index: honorsbaseinstall in Role.php on line 180

...etc etc etc...

Notice: Undefined index: installable in Role.php on line 145

Notice: Undefined index: installable in Role.php on line 145

...etc etc etc...

Notice: Undefined index: phpfile in Role.php on line 212

Notice: Undefined index: phpfile in Role.php on line 212

...etc etc etc...

Notice: Undefined index: config_vars in Role.php on line 49

Notice: Undefined index: config_vars in Role.php on line 49

...etc etc etc...

Warning: Invalid argument supplied for foreach() in PEAR/Command.php on line 259

Warning: Invalid argument supplied for foreach() in /usr/share/pear/PEAR/Command.php on line 259

...etc etc etc...

XML Extension not found

मैं इसे कैसे ठीक करूं?

जवाबों:


91

RedHat EL v6 पर 5.5.14 पर अपने PHP इंस्टॉलेशन को अपडेट करने के बाद मुझे यह त्रुटि आई। मैंने Yum पैकेज मैनेजर के माध्यम से PHP को स्थापित किया था, और फिर मेरे द्वारा उपयोग किए जा रहे कुछ PHP एक्सटेंशन को फिर से स्थापित करने की आवश्यकता थी। इस मुद्दे को कैसे हल किया जाए, इसके सुझाव के बारे में, मैं इस सवाल पर आया था, और अब जब मैंने एक काम करने वाला समाधान खोज लिया है तो मैं यहां अपने निष्कर्षों को साझा करना चाहता था। अन्य सुझाव जो मुझे ऑनलाइन मिले थे, जिनमें PECL / PEAR को मिटाना और फिर से स्थापित करना शामिल था और यहां तक ​​कि मेरे PHP इंस्टॉलेशन ने भी इस समस्या को हल नहीं किया। अंत में कुछ और शोध और PECL / PEAR के स्रोत कोड की समीक्षा करने के बाद मुझे असली कारण मिला। उम्मीद है कि दूसरों की मदद के लिए क्या होगा:

PECL को चलाने का प्रयास करते समय आपको यह त्रुटि दिखाई दे सकती है यदि आपके PHP इंस्टॉलेशन में डिफ़ॉल्ट रूप से XML सक्षम नहीं है, लेकिन इसके बजाय XML समर्थन आमतौर पर एक PHP एक्सटेंशन मॉड्यूल के माध्यम से आपके PHP इंस्टॉलेशन में लोड किया जाता है (यह तब हो सकता है ./configure --disable-xmlजब PHP का निर्माण करते समय ध्वज निर्दिष्ट किया गया था स्रोत से, या यदि आपने विभिन्न पैकेज प्रबंधकों के माध्यम से PHP स्थापित किया है, जहां PHP का निर्माण एक्सएमएल को एक विस्तार मॉड्यूल के माध्यम से लोड करने के लिए कॉन्फ़िगर किया गया है)।

ध्यान दें कि PECL से त्रुटि आउटपुट की अंतिम पंक्ति कैसे है XML Extension not found- यह त्रुटि दिखाई देने का कारण है क्योंकि PECL अपने XMLParser.php वर्ग का उपयोग करने का प्रयास करता है, क्योंकि यह XML एक्सटेंशन तक पहुंच नहीं सकता है (यह XML मॉड्यूल के लिए जाँच करता है extension_loaded('xml')लाइन के आसपास) XMLParser.php स्रोत का 259), और XML मॉड्यूल अनुपलब्ध होने के कारण, यह इसकी कॉन्फ़िगरेशन / सेटिंग्स फ़ाइलों को पार्स नहीं कर सकता है और ऊपर देखी गई अन्य त्रुटियों के सभी आउटपुट करता है।

PECL संचालित करने के तरीके के कारण यह समस्या होती है। PECL कमांड अपने आप में केवल एक शेल स्क्रिप्ट है, जो पहले यह बताती है कि आपके सिस्टम इंस्टॉलेशन पर PHP कहाँ स्थापित है, और फिर मुख्य PECL PHP स्क्रिप्ट फ़ाइल को पथ प्रदान करने से पहले PHP को कमांड लाइन पर कई झंडों के साथ कॉल करता है। समस्या ध्वज जो PECL शेल स्क्रिप्ट का उपयोग कर रहा है, वह -nविकल्प है, जो PHP को किसी भी php.iniफाइल को अनदेखा करने के लिए कहता है (और इसलिए PHP आपकी php.iniफ़ाइल के निर्दिष्ट अतिरिक्त एक्सटेंशन को लोड नहीं करेगा , इस मामले में XML भी शामिल है)।

-nनिम्नलिखित दो आदेशों को चलाकर ध्वज के प्रभाव को देख सकते हैं :

  • पहले php -mकमांड लाइन पर चलने का प्रयास करें
  • तब आउटपुट की तुलना करें php -n -m

जब आप दूसरी कमांड चलाते हैं तो आपको एक्सएमएल एक्सटेंशन को सूचीबद्ध नहीं देखना चाहिए क्योंकि -nध्वज ने बताया कि PHP हमारी php.iniफाइल को पार्स नहीं करता है ।

यदि आप vi `which pecl`कमांड लाइन पर चलते हैं, तो आपको PECL कमांड की सामग्री को देखना चाहिए (जैसा कि ऊपर उल्लेख किया गया है, इसकी सिर्फ एक शेल स्क्रिप्ट है), और यदि आप अंतिम लाइन का निरीक्षण करते हैं, तो आपको कुछ इस तरह दिखाई देगा:

exec $PHP -C -n -q $INCARG -d date.timezone=UTC -d output_buffering=1 -d variables_order=EGPCS -d safe_mode=0 -d register_argc_argv="On" $INCDIR/peclcmd.php "$@"

आप देखना चाहिए -nके बीच सूचीबद्ध झंडा -Cऔर -qझंडे। यदि आप PECL शेल स्क्रिप्ट को संपादित करते हैं, तो उस -nध्वज को छोड़ना चाहिए जिसे अब आप PECL को बिना किसी समस्या के फिर से चला सकते हैं।

वैकल्पिक रूप से, आप PHP को स्रोत से यह सुनिश्चित कर सकते हैं कि XML मॉड्यूल रन-टाइम पर PHP एक्सटेंशन मॉड्यूल से लोड किए जाने के बजाय PHP बाइनरी में संकलित हो। स्पष्ट रूप से -nध्वज को हटाने के लिए PECL शेल स्क्रिप्ट को संपादित करना केवल समस्या को ठीक करेगा जब तक कि PECL / PEAR पुनः स्थापित नहीं हो जाता, उम्मीद है कि हालांकि PECL / PEAR के अनुरक्षक इस फिक्स के साथ अपने रेपो को अपडेट कर सकते हैं। यह सुनिश्चित करना कि PHP का निर्माण XML समर्थन के साथ किया गया है, हालांकि समाधान के लिए एक दीर्घकालिक फिक्स है, लेकिन हर किसी की परिस्थितियों के लिए आदर्श नहीं हो सकता है।

पूर्णता के लिए, यदि आप चलाते vi `which pear`हैं तो आप PECL द्वारा उपयोग की जाने वाली एक समान शेल स्क्रिप्ट देखेंगे, हालांकि -nध्वज उस कमांड से गायब है जो PHP को कॉल करता है और जैसे PEAR कमांड इन समान मुद्दों के अधीन नहीं है।


5
महाकाव्य उत्तर, pecl स्क्रिप्ट का संपादन मेरे लिए काम करता है।
एलेक्स रोस

29
आप सर ... एक संत हैं। ... ... सचमुच। मैं एक ऐसी पटकथा लिखने जा रहा हूं, जो हर अखबार की रचनाओं को स्कैन करती है, और जैसे ही आपका निधन होता है, मैं वेटिकन को बताने जा रहा हूं कि वह धरती पर आपके कर्मों की एक मिसाल के रूप में इस उत्तर का उपयोग करते हुए, बीटाइजेशन की प्रक्रिया शुरू करेगा। बहुत बढ़िया जवाब :)
riwalk

5
धन्यवाद। TLDR; /usr/bin/pecl-n पैरामीटर का उपयोग नहीं करने के लिए अंतिम पंक्ति को संपादित करें ।
dtbarne

7
रनsed -i "$ s|\-n||g" /usr/bin/pecl
AVProgrammer

6
मेरे पास -nअंतिम आदेश नहीं है peclऔर त्रुटियों की लंबी सूची दुर्भाग्य से बनी हुई है
कंबल में व्हाइटलेटर्स

29

मैं अभी ubuntu पर इस समस्या का सामना किया है जब मैं PECL आदेश के लिए बुलाया। केवल एक चीज जिसने मुझे php-xmlपैकेज स्थापित करने में मदद की । पहले जांचें कि क्या आपके पास XML मॉड्यूल पहले से स्थापित है

php -m

अगर आपको यह नहीं मिला तो आपको करना होगा

sudo apt-get install php-pear

यह स्वचालित रूप से php-xml पैकेज स्थापित करेगा। या आप बस इस तरह xml स्थापित कर सकते हैं (आपके पास php के संस्करण के आधार पर)

sudo apt-get install php-xml php7.0-xml

यदि आप xml पाते हैं तो आपने इसे हटा दिया है और इसे फिर से इंस्टॉल किया है

sudo apt-get purge php*-xml
sudo apt-get autoremove php*-xml
sudo apt-get install php-xml php7.0-xml

यदि आपके पास पैकेज मैनेजर के रूप में RPM है तो आप उपयोग कर सकते हैं yum install php-xmlऔरyum remove php-xml


1
php-xml php7.0-xml स्थापित हैं लेकिन XML मॉड्यूल यहाँ नहीं है
Loenix

शानदार जवाब से मुझे मदद मिली
सैयद अकील

8

Im php5.6 का उपयोग कर।

कई उत्तर php-xml स्थापित करने की सलाह देते हैं, लेकिन यह मेरे लिए काम नहीं कर रहा है, जब मैं विशिष्ट संस्करण पसंद करता हूं

sudo apt-get install php5.6-xml

और सब कुछ काम करता है, शायद यह दूसरों की मदद करेगा।


php 5.6 के लिए काम करता है
devst3r

मेरे लिए php 7.2, Ubuntu 16.04 में काम किया। मेरे आदेश था: sudo apt install php7.2-xml। यदि आप चाहते हैं तो मेरी आज्ञा को शामिल करने के लिए आप उत्तर भी अपडेट कर सकते हैं :) धन्यवाद
voghDev

4

आपको "XML एक्सटेंशन नहीं मिला" समस्या को ठीक करने के लिए php-xml पैकेज स्थापित करना होगा


2
थोड़ा और स्पष्टीकरण यहां उपयोगी हो सकता है।
कैस्परर्ड

कृपया ध्यान दें कि यह प्रश्न लगभग 2 वर्ष पुराना है। पुराने सवालों के जवाब देने से बचने की कोशिश करें क्योंकि यह होम स्क्रीन को क्लैट करता है।
कैथरीन मैकइन्स

1
इसका कारण मैंने यह बताया कि मुझे आज इस समस्या का सामना करना पड़ा और इस समाधान से मेरी समस्या हल हो गई!
kavehmb

यह केवल एक चीज है जो हमें करना था, जैसा कि मैं उपयोग कर रहा हूं php7.2और मैंने किसी भी फाइल को संपादित नहीं किया है बस अपने रिश्तेदार संस्करण को कमांड का उपयोग करके स्थापित किया हैsudo apt-get install php7.2-xml
मुहम्मद ओमर असलम

2

किसी भी PEAR RPM को पूरी तरह से हटा दें, फिर rm -rf /usr/share/pear/फिर से नाशपाती और अपने सभी मॉड्यूल स्थापित करें।


के साथ पालन किया yum erase php-pearऔर अब सब ठीक है! धन्यवाद! :)
ईकॉमियो

1
कृपया ध्यान दें कि पुनः स्थापित करते समय (स्टॉक php-pear पैकेज के बजाय) php नाशपाती के php54w संस्करण का उपयोग करें। तो संक्षेप में 1. yum erase php-pear2. rm -rf /usr/share/pear/3.yum install php54w-pear
एटिला फुलोप

2

निम्नलिखित चरण मेरे लिए काम करते हैं।

1 कदम:

yum erase php-pear

2 कदम:

# rpm -Uvh http://ftp.iij.ad.jp/pub/linux/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
# rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm

3 कदम:

 yum install --enablerepo=remi --enablerepo=remi-php56 php-pear

0

PHP7 / डेबियन लोग (समान / समान कारण):

इसका कारण, ऊपर उल्लिखित एक्सएमएल विस्तार है। हमें अवश्य ही डॉटब का उपयोग करना चाहिए , और xml को एक अलग पैकेज होने के लिए बिल्ड-इन होने से हटाया है :

स्रोत: https://www.dotdeb.org/2016/06/24/php-7-0-8-for-jessie/

कृपया यह भी ध्यान दें कि bcmatch, dba, mbstring, साबुन, xml और ज़िप अब उनके अलग-अलग समर्पित पैकेज हैं।

इस का मतलब है कि

php -n

अब xml शामिल नहीं होगा, जो PEAR पैकेज पार्सर पर निर्भर करता है (XML पार्सर)। स्रोत pear.php.net/package/PEAR/download

PHP एक्सटेंशन: xml

चूंकि pecl के लिए यह महत्वपूर्ण है कि सिस्टम के php.ini का उपयोग न करें, सभी मामलों में कार्यक्षमता की गारंटी देने के लिए (भले ही अड़चन यह कारण है कि आप pecl चलाते हैं ..) यह -n का उपयोग करके नहीं बदलेगा .. बल्कि डॉटकेब लोगों की आवश्यकता है अंत में रिपैकिंग, रिस्ट्रक्चरिंग और शिफ्टिंग आर्गन पैकेज को बिना थोडा परीक्षण के भी रोक दिया।

शिप किए गए PEAR पैकेज के साथ भी एक समस्या है, जिसके साथ उन्नत होने की आवश्यकता है ... वर्तमान प्रतिष्ठा के कारण कुछ और पोस्ट करने की अनुमति नहीं है

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.