सवाल पीईसीएल कमांड त्रुटियों की लंबी सूची पैदा करता है


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

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

इसके तुरंत बाद, मुझे एहसास हुआ कि 5.5 फ्रेमवर्क के साथ संगत नहीं है जिसके साथ मैं काम कर रहा था इसलिए मैंने yp मिटा दिया 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

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


37
2018-04-18 03:32


मूल




जवाब:


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

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

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

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

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

  • पहले दौड़ने की कोशिश करो php -m कमांड लाइन पर
  • फिर आउटपुट की तुलना करें php -n -m

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

यदि आप भागते हैं vi `which 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 झंडे। यदि आप पीईसीएल खोल स्क्रिप्ट संपादित करते हैं, तो इसे छोड़कर -n फ्लैग अब आपको मुद्दों के बिना पीईसीएल चलाने में सक्षम होना चाहिए।

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

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


81
2017-07-11 22:58



महाकाव्य जवाब, pecl स्क्रिप्ट संपादन मेरे लिए काम किया। - Alex Ross
तुम महोदय ... एक संत हैं। ... ... सचमुच। मैं एक ऐसी स्क्रिप्ट लिखने जा रहा हूं जो हर समाचार पत्र की मौत को स्कैन करे, और जैसे ही आप गुजरते हैं, मैं वेटिकन को पृथ्वी पर अपने कर्मों के उदाहरण के रूप में इस उत्तर का उपयोग करके उत्थान प्रक्रिया शुरू करने जा रहा हूं। बहुत बढ़िया जवाब :) - riwalk
धन्यवाद। TLDR; की अंतिम पंक्ति संपादित करें /usr/bin/pecl -एन पैरामीटर का उपयोग नहीं करने के लिए। - dtbarne
रन sed -i "$ s|\-n||g" /usr/bin/pecl - AVProgrammer
मेरे पास नहीं है -n के अंतिम आदेश में pecl और त्रुटियों की लंबी सूची दुर्भाग्य से बनी हुई है - whiteletters in blankpapers


जब मैंने पीईसीएल कमांड के लिए बुलाया तो मैंने उबंटू पर इस समस्या का सामना किया है। एकमात्र चीज जिसने मेरी मदद की है वह स्थापित करना है php-xml पैकेज। सबसे पहले जांचें कि क्या आपके पास पहले से स्थापित एक्सएमएल मॉड्यूल है

php -m

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

sudo apt-get install php-pear

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

sudo apt-get install php-xml php7.0-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


19
2018-04-11 13:32



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


मैं php5.6 का उपयोग कर।

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

sudo apt-get install php5.6-xml

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


5
2018-03-23 16:20



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


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


3
2018-02-24 17:38



थोड़ा और स्पष्टीकरण यहां उपयोगी हो सकता है। - kasperd
कृपया ध्यान दें कि यह प्रश्न लगभग 2 साल पुराना है। पुराने प्रश्नों का उत्तर देने से बचने की कोशिश करें क्योंकि यह होम स्क्रीन को बंद कर देता है। - Catherine MacInnes
कारण मैंने इसका जवाब दिया था कि आज मुझे इस समस्या का सामना करना पड़ा और इस समाधान ने मेरी समस्या हल की! - kavehmb
यह एकमात्र चीज है जिसे हमें करना था, जैसा कि मैं उपयोग कर रहा हूं php7.2 और मैंने किसी भी फाइल को संपादित नहीं किया है बस कमांड का उपयोग कर अपने रिश्तेदार संस्करण को स्थापित किया है sudo apt-get install php7.2-xml - Muhammad Omer Aslam


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


2
2018-04-18 08:28



इसके साथ पीछा किया yum erase php-pear और अब सब ठीक है! धन्यवाद! :) - eComEvo
पुनः स्थापित करते समय php नाशपाती के php54w संस्करण का उपयोग करके नोट करें (स्टॉक php-pear पैकेज के बजाय)। तो संक्षेप में 1।yum erase php-pear 2। rm -rf /usr/share/pear/ 3। yum install php54w-pear - Attila Fulop


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

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

2
2018-06-23 10:45





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

इसका कारण यह है कि, ऊपर वर्णित, अनुपलब्ध एक्सएमएल एक्सटेंशन क्या है। हम का उपयोग करना होगा dotdeb, और xml को होने से हटा दिया है में निर्माण एक अलग पैकेज होने के लिए:

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

कृपया यह भी ध्यान दें कि बीसीएमएच, डीबीए, एमबीस्ट्रिंग, साबुन, एक्सएमएल और ज़िप अब उनके अलग समर्पित पैकेज हैं।

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

php -n

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

PHP एक्सटेंशन: एक्सएमएल

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

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


0
2018-06-26 06:03