PECL komutu uzun hata listesi üretir


47

Şu anda CentOS 6.5'te PHP 5.4 çalışıyor.

Webtatik php55w paketini kurduktan sonra PECL üzerinden redis ve mongo ile birlikte sorunsuzca PEAR + PECL kurdum.

Kısa süre sonra, 5.5'in çalıştığım çerçeveyle uyumlu olmadığını fark ettim, bu yüzden php55w dosyasını sildim ve yerine php54w yükledim.

Şimdi pecl komutu hiç çalışmıyor. Herhangi bir pecl komutu verdiğimde sadece bu çok uzun hata dizisini oluşturuyor (kısaltılmış ... en çok tekrarlananlar):

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

Bunu nasıl düzeltebilirim?

Yanıtlar:


91

PHP kurulumumu RedHat EL v6'da 5.5.14 olarak güncelledikten sonra bu hatayı karşıladım. PHP'yi Yum paket yöneticisi ile kurdum ve kullandığım bazı PHP eklentilerini tekrar kurmam gerekiyordu. Bu sorunun nasıl çözüleceğine dair ipuçları ararken, bu soruyla karşılaştım ve şimdi çalışan bir çözüm buldum, burada bulgularımı paylaşmak istedim. PECL / PEAR'ın silinmesini ve yeniden kurulmasını içeren çevrimiçi önerilerde bulundum ve hatta PHP kurulumum bu sorunu çözmedi. Sonunda biraz daha araştırma ve PECL / PEAR için kaynak kodunu gözden geçirdikten sonra gerçek nedeni buldum. Umarım aşağıdakiler başkalarına yardımcı olacaktır:

PHP kurulumunuzda varsayılan olarak etkin XML yoksa, PECL çalıştırmaya çalışırken bu hatayı görebilirsiniz ancak bunun yerine XML desteği genellikle PHP kurulumunuza bir PHP eklenti modülü ile yüklenir (bu, ./configure --disable-xmlPHP inşa edilirken bayrak belirtilmişse ortaya çıkabilirdi). kaynaktan, ya da PHP'yi, PHP'nin bir eklenti modülü aracılığıyla XML yüklemek üzere yapılandırıldığı çeşitli paket yöneticileri aracılığıyla kurduysanız).

PECL'den gelen hata çıktısının son satırının ne olduğuna dikkat edin XML Extension not found- bu hatanın ortaya çıkmasının nedeni, PECL'in XMLParser.php sınıfını kullanmaya çalıştığı zaman, başarısız olduğu için başarısız olur çünkü XML uzantısına erişemez ( extension_loaded('xml')satırdaki kullanarak XML modülünü kontrol eder) XMLParser.php kaynağının 259'u) ve XML modülü kullanılamadığından, yapılandırma / ayar dosyalarını ayrıştıramaz ve yukarıda görülen diğer tüm hataları çıkarır.

Bu sorunun ortaya çıkmasının nedeni, PECL'nin çalışma şeklinden kaynaklanıyor. PECL komutunun kendisi, öncelikle sistem kurulumunuzda PHP'nin kurulduğu yerde çalışan ve daha sonra ana PECL PHP komut dosyası yolunu sağlamadan önce PHP'yi bir kaç bayrakla komut satırında çağıran bir kabuk betiğidir. PECL kabuk betiğinin kullandığı problem bayrağı -n, PHP'ye herhangi bir php.inidosyayı yoksaymasını söyleyen seçenektir (bu nedenle PHP, php.inibu durumda XML de dahil olmak üzere dosyanızın belirttiği ek uzantıların hiçbirini yüklemez ).

-nAşağıdaki iki komutu çalıştırarak bayrağın etkisini görebilirsiniz :

  • ilk önce php -mkomut satırından çalıştırmayı deneyin
  • sonra çıktıyı karşılaştır php -n -m

İkinci komutu çalıştırdığınızda listelenen XML uzantısını görmemelisiniz, çünkü -nbayrak PHP'ye php.inidosyalarımızı ayırmamasını söyledi .

vi `which pecl`Komut satırında çalıştırıyorsanız , PECL komutunun içeriğini görmelisiniz (yukarıda belirtildiği gibi, sadece bir kabuk betiği) ve son satırı incelerseniz, şunun gibi bir şey göreceksiniz:

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 "$@"

Görmeliydin -narasında sıralanan bayrağı -Cve -qbayrakları. PECL kabuk betiğini düzenlerseniz, -nbayrağını atlamak, şimdi PECL'yi sorunsuz bir şekilde çalıştırabilmeniz gerekir.

Alternatif olarak, PHP'nin kaynağından derleyebilmesi için, XML modülünün çalışma zamanında bir PHP eklenti modülünden yüklenmek yerine PHP ikili dosyasına derlendiğinden emin olabilirsiniz. PECL kabuk betiğini -nbayrağı kaldırmak için düzenlemek açıkça PECL / PEAR'ın yeniden kurulmasına kadar sorunu çözecektir, umarım PECL / PEAR'ın sahipleri bu düzeltmeyle repolarını güncelleyebilirler. PHP'nin derlenmiş XML desteğiyle oluşturulduğundan emin olmak, çözüm için uzun vadeli bir düzeltmedir, ancak herkesin koşulları için ideal olmayabilir.

Sadece bütünlük için, vi `which pear`koşarsanız, PECL'nin kullandığına benzer bir kabuk betiği görürsünüz, ancak -nPHP'yi çağıran komuttan bayrak eksiktir ve PEAR komutu bu sorunlara tabi değildir.


5
Epik cevap, pecl betiğini düzenlemek benim için çalıştı.
Alex Ross,

29
Siz efendim ... bir azizsiniz. ... ... resmen. Her gazetenin vahşiliğini tarayan bir senaryo yazacağım ve vefat ettiğinizde, Vatikan'a güzelleştirme sürecini başlatmasını söyleyeceğim, bu cevabı dünyadaki işlerinizin bir örneği olarak kullanacağım. Müthiş cevap :)
riwalk,

5
Teşekkürler. TLDR; /usr/bin/pecl-n parametresini kullanmamak için son satırı düzenleyin .
dtbarne

7
Runsed -i "$ s|\-n||g" /usr/bin/pecl
AVProgrammer

6
Ben yok -nson komuta peclmaalesef kalır ve hataların uzun listeye
blankpapers içinde whiteletters

29

PECL komutunu çağırdığımda ubuntu'da bu problemle karşılaştım. Bana yardım eden tek şey php-xmlpaketi kurmak . Öncelikle yüklü olan XML modülünün olup olmadığını kontrol edin.

php -m

Bulamazsan, o zaman zorundasın.

sudo apt-get install php-pear

otomatik olarak php-xml paketini kuracaktır. ya da sadece xml'i bu şekilde kurabilirsiniz (sahip olduğunuz php versiyonuna bağlı olarak).

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

Xml bulursanız, kaldırmanız ve yeniden kurmanız gerekir.

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

Paket yöneticisi olarak RPM'niz varsa yum install php-xmlveyum remove php-xml


1
php-xml php7.0-xml yüklü ancak XML modülü burada değil
Loenix

Parlak cevap bana yardımcı oldu
Syed Aqeel

8

Ben php5.6 kullanıyorum.

Pek çok cevap php-xml'yi kurmanızı önerir, ancak benim için belirli bir sürüm yazarken, bu benim için çalışmıyor

sudo apt-get install php5.6-xml

ve her şey çalışıyor, belki başkalarına yardım edecek.


php 5.6 için çalışıyor
devst3r

Benim için php 7.2, Ubuntu 16.04'te çalıştı. Benim komut oldu: sudo apt install php7.2-xml. İsterseniz
emrimi

4

"XML Uzantısı bulunamadı" sorununu çözmek için php-xml paketini yüklemelisiniz


2
Burada biraz daha açıklama yapmak faydalı olabilir.
kasperd

Lütfen bu sorunun yaklaşık 2 yaşında olduğunu unutmayın. Ana ekranı sıkıştırarak eski soruları yanıtlamaktan kaçının.
Catherine MacInnes

1
Buna cevap vermemin nedeni bugün bu sorunla karşılaştığım ve bu çözüm sorunumu çözdü!
kavehmb

Yapmam gereken tek şey bu, kullanıyorum php7.2ve sadece göreceli sudo apt-get install php7.2-xml
Muhammed Ömer Aslam

2

PEAR RPM'leri tamamen çıkarın, ardından rm -rf /usr/share/pear/armut ve tüm modüllerinizi tekrar takın.


Bunu takip ettim yum erase php-pearve şimdi her şey yolunda! Teşekkürler! :)
eComEvo

1
Lütfen yeniden yüklerken php54w php54w versiyonunu kullanın (stok php-pear paketi yerine). Yani kısacası 1. yum erase php-pear2. rm -rf /usr/share/pear/3.yum install php54w-pear
Attila Fulop

2

Aşağıdaki adımlar benim için çalışıyor.

1 adım:

yum erase php-pear

2 adım:

# 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 adım:

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

0

PHP7 / Debian kullanıcıları (benzer / aynı sebep):

Bunun nedeni, yukarıda belirtildiği gibi, eksik XML uzantısıdır. Bize zorunluluk kullanacak dotdeb ve olmaktan kaldırılan xml yap- ayrı paket olmanın:

kaynak: https://www.dotdeb.org/2016/06/24/php-7-0-8-for-jessie/

Ayrıca bcmatch, dba, mbstring, soap, xml ve zip dosyalarının ayrı paketlerine sahip olduklarını lütfen unutmayın .

Bu şu demek

php -n

PEAR paket çözümleyicisinin dayandığı xml kodunu artık içermeyecek (XML ayrıştırıcısı). Kaynak pear.php.net/package/PEAR/download

PHP Uzantısı: xml

PECL'nin sistemin php.ini'sini kullanmaması kritik öneme sahip olduğundan, her durumda işlevselliği garanti etmek (işlevsizliği pecl'i çalıştırma sebebi olsa bile) ..nn kullanarak değişmez Sonunda, çevre paketlerini yeniden test etmeden, yeniden yapılandırarak ve değiştirerek, hafifçe test etmeden durdurmak için.

Ayrıca, mevcut itibar nedeniyle başka bir şey göndermesine izin verilmeyen ... ile yükseltilmesi gereken sevk edilen PEAR paketinde de bir sorun var.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.