Heim > Fragen und Antworten > Hauptteil
Als ich den Anweisungen zur Installation von PEAR aus dem offiziellen [Handbuch][1] folgte, erhielt ich diese Fehlermeldung:
致命错误:未捕获错误:无法在 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
Ich habe nach anderen Lösungen gesucht und [diese][2] gefunden. Allerdings kann ich Pear immer noch nicht installieren und erhalte immer noch diese Fehlermeldung:
PHP 致命错误:C:xampp_latestphpgo-pear.php 第 1182
Zeilen unterstützen die Array- und String-Offset-Zugriffssyntax mit geschweiften Klammern nicht mehr.
Ich habe versucht, über das Netzwerk und die Befehlszeile zu installieren, habe aber den gleichen Fehler erhalten.
Noch ein Update.. Ich habe weiter gesucht und Folgendes gefunden: Verband Also habe ich versucht, die geschweiften Klammern in verschiedenen Dateien in eckige Klammern zu ändern, wie im Fehler vorgeschlagen, und am Ende habe ich diesen Fehler erhalten:
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
基本上,xampp 提供的 PEAR 并未更新为在 PHP 8.x 下运行。并面临 PHP 8.0 中多个已弃用和删除的功能,这些功能会导致 PHP 致命错误。
1) 访问字符问题
第一个问题是 字符串访问使用大括号 {}
访问时从零开始的偏移量已被删除,只能使用方括号 []
。
比较原始代码
$arg{0}
使用固定代码:
$arg[0]
解决方案:
使用正则表达式 \{(\$[a-zA-Z0-9\+]*)\}
搜索 xampp/php/pear
文件夹中的所有文件并替换与 [$1]
重要:检查每次出现的情况,不要更改脚本中的正则表达式!!!
2)未捕获的ArgumentCountError问题
第二个问题是 php 函数 set_error_handler< /a> 哪里是 删除了 PHP 8.0.0 中的最后一个参数。
回调函数需要五个参数,但它只获得四个参数,因此调用失败,并显示 PHP Fatal error: Uncaught ArgumentCountError: Too Fewarguments to function error_handler( ),4 项通过,正好 5 项预期
。
解决方案:
搜索 set_error_handler(
调用并找到引用的回调函数 error_handler
并将最后一个参数设为可选。
就我而言,它位于脚本 xampp\php\pear\pearcmd.php
中,函数定义位于第 446 行:
比较原始函数定义:
function error_handler($errno, $errmsg, $file, $line, $vars)
应用修复后:
function error_handler($errno, $errmsg, $file, $line, $vars = null)
注意:我发现 Apache 上已经报告了“bug”好友支持论坛已于 2021 年 9 月回归。
3)未定义函数each()问题
第三个问题是删除了 PHP 函数 each() ,即抛出PHP致命错误:未捕获错误:调用未定义的函数each()
。
解决方案
搜索所有出现的 every(
(使用空格消除结果集中的函数“foreach”),并使用函数 foreach
进行检查和更新,并在每个中使用正确的参数文件。\
while
语法示例
while (list($i, $arg) = each($args)) {
可以替换为
foreach ($args as $i => $arg) {
list
语法示例
list(,$first) = each($lines);
可以替换为
foreach($lines as $first){}
还有一些在 If - else
语句中使用的其他情况,可以用 emtpy($args)
后跟 foreach($args as $opt_arg ){}
构建变量 $opt_arg。
If - else
语法示例
if (!strlen($opt_arg) && !(list(, $opt_arg) = each($args))) {
可以替换为
if (!strlen($opt_arg) && !empty($args)) { foreach($args as $opt_arg){}
PEAR 终于可以使用 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