Pemasangan pear dalam Windows XAMPP PHP 8.1.10
P粉141911244
P粉141911244 2023-12-31 10:46:35
0
1
434

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粉141911244
P粉141911244

membalas semua(1)
P粉222320176

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 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
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan