首頁  >  問答  >  主體

Windows XAMPP PHP 8.1.10 中的 Pear 安裝

當我按照官方[手冊][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粉141911244P粉141911244316 天前394

全部回覆(1)我來回復

  • P粉222320176

    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

    回覆
    0
  • 取消回覆