Apabila saya mengikuti arahan tentang cara memasang PEAR daripada [manual][1] rasmi, saya mendapat ralat ini:
致命错误:未捕获错误:无法在 C:xampp_latestphp 中打开所需的 'phar://go-pear.phar/index.php' (include_path='C:xampp_latestphpPEAR') go-pear.phar:1284 堆栈跟踪:#0 {main} 抛出在 C:xampp_latestphpgo-pear.phar 第 1284
OK
Saya cuba mencari penyelesaian lain dan menemui [yang ini][2]. Walau bagaimanapun, saya masih tidak boleh memasang pear dan saya masih mendapat ralat ini:
PHP 致命错误:C:xampp_latestphpgo-pear.php 第 1182
Baris tidak lagi menyokong sintaks akses tatasusunan dan rentetan mengimbangi dengan pendakap.
Saya cuba memasang melalui rangkaian dan baris arahan tetapi mendapat ralat yang sama.
Lain kemas kini.. Saya terus mencari lagi dan mendapat ini: persatuan Jadi saya cuba menukar pendakap kepada kurungan segi empat sama dalam fail berbeza seperti yang dicadangkan dalam ralat dan akhirnya, saya mendapat ralat ini:
PHP Fatal error: Uncaught ArgumentCountError: Too few arguments to function error_handler(), 4 passed and exactly 5 expected in C:xampp_latestphppearpearcmd.php:446 Stack trace: #0 [internal function]: error_handler(8192, 'trim(): Passing...', 'C:\xampp_latest...', 152) #1 C:xampp_latestphppearPEARXMLParser.php(152): trim(NULL) #2 C:xampp_latestphppearPEARXMLParser.php(166): PEAR_XMLParser->postProcess(NULL, 'options') #3 [internal function]: PEAR_XMLParser->endHandler(Object(XMLParser), 'options') #4 C:xampp_latestphppearPEARXMLParser.php(102): xml_parse(Object(XMLParser), '<commands versi...') #5 C:xampp_latestphppearPEARCommand.php(247): PEAR_XMLParser->parse('<commands versi...') #6 C:xampp_latestphppearPEARCommand.php(302): PEAR_Command::registerCommands() #7 C:xampp_latestphppearpearcmd.php(54): PEAR_Command::getCommands() #8 {main} thrown in C:xampp_latestphppearpearcmd.php on line 446 [1]: https://pear.php.net/manual/en/installation.getting.php [2]: https://www.ivankristianto.com/install-or-update-pear-on-xampp-for-windows/
Pada asasnya, PEAR yang disediakan oleh xampp belum dikemas kini untuk dijalankan di bawah PHP 8.x. dan menghadapi pelbagai ciri yang tidak digunakan dan dialih keluar dalam PHP 8.0 yang mengakibatkan ralat maut PHP.
1) Akses masalah watak
Masalah pertama ialah akses rentetan menggunakan pendakap kerinting
{}
访问时从零开始的偏移量已被删除,只能使用方括号[]
.Bandingkan kod asal
Gunakan kod tetap:
Penyelesaian:
Gunakan ungkapan biasa
{($[a-zA-Z0-9+]*)}
搜索xampp/php/pear
文件夹中的所有文件并替换与[]
PENTING: Semak setiap kejadian dan jangan tukar regex dalam skrip anda! ! !
2) Isu Uncaught ArgumentCountError
Masalah kedua ialah fungsi php set_error_handler di mana mengalih keluar parameter terakhir dalam PHP 8.0.0.
Fungsi panggil balik memerlukan lima argumen, tetapi ia hanya mendapat empat argumen, jadi panggilan gagal dengan
PHP Fatal error: Uncaught ArgumentCountError: Too Fewarguments to function error_handler( ),4 项通过,正好 5 项预期
.Penyelesaian:
Cari
set_error_handler(
调用并找到引用的回调函数error_handler
dan jadikan parameter terakhir sebagai pilihan.Dalam kes saya, ia berada dalam skrip
xamppphppearpearcmd.php
dan definisi fungsi adalah pada baris 446:Bandingkan definisi fungsi asal:
Selepas menggunakan pembaikan:
NOTA: Saya telah mendapati bahawa "pepijat" telah dilaporkan pada Forum Sokongan Rakan Apacheyang dikembalikan pada September 2021.
3) Fungsi yang tidak ditentukan setiap() masalah
Masalah ketiga ialah fungsi PHP setiap() telah dialih keluar, yang membuang
PHP致命错误:未捕获错误:调用未定义的函数each()
.Penyelesaian
Cari semua kejadian
every(
(使用空格消除结果集中的函数“foreach”),并使用函数foreach
untuk menyemak dan mengemas kini, menggunakan fail parameter yang betul dalam setiap satu.while
Contoh Tatabahasaboleh digantikan dengan
list
Contoh Tatabahasaboleh digantikan dengan
Terdapat juga beberapa dalam pembolehubah binaan
If - else
语句中使用的其他情况,可以用emtpy($args)
后跟foreach($args as $opt_arg ){}
$opt_arg.If - else
Contoh Tatabahasaboleh digantikan dengan
PEAR akhirnya tersedia dengan versi XAMPP: 8.2.0