當我按照官方[手冊][1]中有關如何安裝 PEAR 的說明進行操作時,出現了此錯誤:
致命錯誤:未捕獲錯誤:無法在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
行
我嘗試尋找其他解決方案並找到了[這個][2]。但是,我仍然無法安裝 pear,並且仍然收到此錯誤:
PHP 致命錯誤:C:xampp_latestphpgo-pear.php 第 1182
行不再支援帶有大括號的陣列和字串偏移存取語法。
我嘗試透過基於網路和命令列的安裝,但得到了同樣的錯誤。
又是一個更新.. 我繼續進行更多搜索並得到了這個: 關聯 因此,我嘗試按照錯誤中的建議將不同文件中的大括號更改為方括號,最後,我收到此錯誤:
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