Saya menemukan kesalahan ini setelah memperbarui instalasi PHP saya ke 5.5.14, pada RedHat EL v6. Saya telah menginstal PHP melalui manajer paket Yum, dan kemudian perlu menginstal ulang beberapa ekstensi PHP yang saya gunakan. Dalam mencari kiat tentang cara mengatasi masalah ini, saya menemukan pertanyaan ini, dan sekarang setelah saya menemukan solusi yang berfungsi, saya ingin membagikan temuan saya di sini. Saran lain yang saya temukan online termasuk menghapus dan menginstal ulang PECL / PEAR dan bahkan instalasi PHP saya tidak menyelesaikan masalah ini. Akhirnya setelah beberapa penelitian lebih lanjut dan meninjau kode sumber untuk PECL / PEAR saya menemukan penyebab sebenarnya. Semoga yang berikut ini dapat membantu orang lain:
Anda mungkin melihat kesalahan ini ketika mencoba menjalankan PECL jika instalasi PHP Anda tidak memiliki XML yang diaktifkan secara default, tetapi sebaliknya dukungan XML biasanya dimuat ke dalam instalasi PHP Anda melalui modul ekstensi PHP (ini bisa terjadi jika ./configure --disable-xml
bendera ditentukan ketika membangun PHP dari sumber, atau jika Anda menginstal PHP melalui berbagai manajer paket tempat build PHP dikonfigurasikan untuk memuat XML melalui modul ekstensi).
Perhatikan bagaimana baris terakhir dari output kesalahan dari PECL adalah XML Extension not found
- alasan kesalahan ini muncul adalah karena ketika PECL mencoba menggunakan kelas XMLParser.php-nya gagal karena tidak dapat mengakses ekstensi XML (memeriksa modul XML menggunakan extension_loaded('xml')
sekitar baris 259 dari sumber XMLParser.php), dan karena modul XML tidak tersedia, ia tidak dapat mengurai file konfigurasi / pengaturannya dan menampilkan semua kesalahan lain yang terlihat di atas.
Alasan masalah ini terjadi adalah karena cara PECL beroperasi. Perintah PECL itu sendiri hanyalah skrip shell, yang pertama kali bekerja di mana PHP diinstal pada instalasi sistem Anda, dan kemudian memanggil PHP pada baris perintah dengan sejumlah flag sebelum memberikan path ke file skrip PHP PECL utama. Bendera masalah yang digunakan skrip shell PECL adalah -n
opsi, yang memberi tahu PHP untuk mengabaikan php.ini
file apa pun (dan karenanya PHP tidak akan memuat ekstensi tambahan apa pun yang php.ini
ditentukan file Anda , termasuk dalam hal ini XML).
Orang dapat melihat dampak dari -n
bendera dengan menjalankan dua perintah berikut:
- pertama coba jalankan
php -m
di baris perintah
- kemudian bandingkan hasilnya
php -n -m
Anda seharusnya tidak melihat ekstensi XML terdaftar ketika Anda menjalankan perintah kedua karena -n
bendera memberitahu PHP untuk tidak mem-parsing php.ini
file kami .
Jika Anda menjalankan vi `which pecl`
pada baris perintah Anda akan melihat isi dari perintah PECL (seperti yang disebutkan di atas, itu hanya skrip shell), dan jika Anda memeriksa baris terakhir, Anda akan melihat sesuatu seperti ini:
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 "$@"
Anda harus melihat -n
bendera yang tercantum antara -C
dan -q
. Jika Anda mengedit skrip shell PECL, menghilangkan -n
bendera yang sekarang Anda dapat menjalankan PECL lagi tanpa masalah.
Sebagai alternatif, Anda dapat mengkompilasi ulang PHP dari sumber untuk memastikan bahwa modul XML dikompilasi ke dalam biner PHP alih-alih dimuat dari modul ekstensi PHP saat run-time. Jelas mengedit skrip shell PECL untuk menghapus -n
bendera hanya akan memperbaiki masalah sampai PECL / PEAR diinstal ulang, mudah-mudahan bagaimanapun pengelola PECL / PEAR dapat memperbarui repo mereka dengan perbaikan ini. Memastikan PHP dibangun dengan dukungan XML yang dikompilasi, bagaimanapun juga merupakan solusi jangka panjang untuk solusi ini, tetapi mungkin tidak ideal untuk keadaan semua orang.
Hanya untuk kelengkapan, jika Anda menjalankan vi `which pear`
Anda akan melihat skrip shell yang sangat mirip dengan yang digunakan PECL, namun -n
flag tersebut hilang dari perintah yang memanggil PHP dan karenanya perintah PEAR tidak mengalami masalah yang sama.
/usr/bin/pecl
untuk tidak menggunakan parameter -n.sed -i "$ s|\-n||g" /usr/bin/pecl
-n
perintah terakhirpecl
dan daftar panjang kesalahan tetap sayangnyaSaya baru saja menghadapi masalah ini di ubuntu ketika saya memanggil perintah PECL. Satu-satunya hal yang membantu saya adalah menginstal
php-xml
paket. Pertama periksa apakah Anda sudah menginstal modul XMLJika Anda tidak menemukannya maka Anda harus melakukannya
itu akan secara otomatis menginstal paket php-xml. atau Anda dapat menginstal xml seperti ini (tergantung pada versi php yang Anda miliki)
Jika Anda menemukan xml maka Anda harus menghapusnya dan menginstalnya kembali
Jika Anda memiliki RPM sebagai pengelola paket, Anda dapat menggunakan
yum install php-xml
danyum remove php-xml
sumber
Saya menggunakan php5.6.
Banyak jawaban menyarankan untuk menginstal php-xml, tetapi tidak berfungsi untuk saya, ketika saya mengetik versi tertentu suka
dan semuanya berfungsi, mungkin itu akan membantu orang lain.
sumber
sudo apt install php7.2-xml
. Anda dapat memperbarui jawabannya dengan menyertakan perintah saya jika Anda mau :) terima kasihAnda harus menginstal paket php-xml untuk memperbaiki masalah "Ekstensi XML tidak ditemukan"
sumber
php7.2
dan saya tidak mengedit file yang baru saja menginstal versi relatif saya menggunakan perintahsudo apt-get install php7.2-xml
Hapus semua PEAR RPM sepenuhnya,
rm -rf /usr/share/pear/
lalu instal pir lagi dan semua modul Anda.sumber
yum erase php-pear
dan sekarang semuanya baik-baik saja! Terima kasih! :)yum erase php-pear
2.rm -rf /usr/share/pear/
3.yum install php54w-pear
Langkah-langkah berikut ini berhasil untuk saya.
1 langkah:
2 langkah:
3 langkah:
sumber
PHP7 / Orang Debian (alasan serupa / sama):
Alasan untuk itu, adalah, bagaimana disebutkan di atas, ekstensi XML yang hilang. Sebagian dari kita harus menggunakan dotdeb , dan xml yang dihapus dari build-in menjadi paket terpisah:
sumber: https://www.dotdeb.org/2016/06/24/php-7-0-8-for-jessie/
Ini artinya, itu
php -n
tidak akan lagi menyertakan xml, yang tergantung pada pengurai paket PEAR (XML parser). Sumber pear.php.net/package/PEAR/download
Karena sangat penting bagi pecl untuk tidak menggunakan php.ini dari sistem, untuk menjamin fungsionalitas dalam semua kasus (bahkan jika disfungsionalitas adalah alasan Anda menjalankan pecl ..) itu tidak akan berubah menggunakan -n .. bukan yang dibutuhkan pria dotdeb untuk akhirnya berhenti mengemas ulang, merestrukturisasi dan menggeser paket-paket diseluruh tanpa sedikit pun mengujinya.
Ada juga masalah dengan paket PEAR yang dikirim, yang perlu ditingkatkan dengan ... tidak diizinkan memposting hal lain karena reputasi saat ini
sumber