Rumah > Soal Jawab > teks badan
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/
P粉2223201762024-01-01 00:19:35
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
$arg{0}
Gunakan kod tetap:
$arg[0]
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< /a> 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:
function error_handler($errno, $errmsg, $file, $line, $vars)
Selepas menggunakan pembaikan:
function error_handler($errno, $errmsg, $file, $line, $vars = null)
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 Tatabahasa
while (list($i, $arg) = each($args)) {
boleh digantikan dengan
foreach ($args as $i => $arg) {
list
Contoh Tatabahasa
list(,$first) = each($lines);
boleh digantikan dengan
foreach($lines as $first){}
Terdapat juga beberapa dalam pembolehubah binaan If - else
语句中使用的其他情况,可以用 emtpy($args)
后跟 foreach($args as $opt_arg ){}
$opt_arg.
If - else
Contoh Tatabahasa
if (!strlen($opt_arg) && !(list(, $opt_arg) = each($args))) {
boleh digantikan dengan
if (!strlen($opt_arg) && !empty($args)) { foreach($args as $opt_arg){}
PEAR akhirnya tersedia dengan versi XAMPP: 8.2.0
C:\xampp\php>pear help version PEAR Version: 1.10.1 PHP Version: 8.2.0 Zend Engine Version: 4.2.0 Running on: Windows NT D5KGFJF 10.0 build 19045 (Windows 10) AMD64