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-xml
PHP 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.ini
dosyayı yoksaymasını söyleyen seçenektir (bu nedenle PHP, php.ini
bu durumda XML de dahil olmak üzere dosyanızın belirttiği ek uzantıların hiçbirini yüklemez ).
-n
Aşağıdaki iki komutu çalıştırarak bayrağın etkisini görebilirsiniz :
- ilk önce
php -m
komut 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ü -n
bayrak PHP'ye php.ini
dosyaları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 -n
arasında sıralanan bayrağı -C
ve -q
bayrakları. PECL kabuk betiğini düzenlerseniz, -n
bayrağı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 -n
bayrağı 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 -n
PHP'yi çağıran komuttan bayrak eksiktir ve PEAR komutu bu sorunlara tabi değildir.