Installation de poire sous Windows XAMPP PHP 8.1.10
P粉141911244
P粉141911244 2023-12-31 10:46:35
0
1
413

Lorsque j'ai suivi les instructions d'installation de PEAR à partir du [manuel][1] officiel, j'ai eu cette erreur :

致命错误:未捕获错误:无法在 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 D'accord

J'ai essayé de chercher d'autres solutions et j'ai trouvé [celle-ci][2]. Cependant, je n'arrive toujours pas à installer pear et j'obtiens toujours cette erreur :

PHP 致命错误:C:xampp_latestphpgo-pear.php 第 1182 Les lignes ne prennent plus en charge la syntaxe d'accès par décalage de tableau et de chaîne avec des accolades.

J'ai essayé d'installer via le réseau et la ligne de commande, mais j'ai eu la même erreur.

Une autre mise à jour.. J'ai continué mes recherches et j'ai obtenu ceci : association J'ai donc essayé de changer les accolades en crochets dans différents fichiers comme suggéré dans l'erreur et au final, j'ai eu cette erreur :

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

répondre à tous(1)
P粉222320176

Fondamentalement, le PEAR fourni par xampp n'a pas été mis à jour pour fonctionner sous PHP 8.x. et a été confronté à plusieurs fonctionnalités obsolètes et supprimées dans PHP 8.0 qui ont entraîné des erreurs fatales PHP.

1) Problème d'accès au personnage
Le premier problème est que l'accès aux chaînes utilise des accolades {} 访问时从零开始的偏移量已被删除,只能使用方括号 [].

Comparez le code original

$arg{0}

Utilisez le code fixe :

$arg[0]

Solution :
Utilisez des expressions régulières {($[a-zA-Z0-9+]*)} 搜索 xampp/php/pear 文件夹中的所有文件并替换与 []
IMPORTANT : Vérifiez chaque occurrence et ne modifiez pas l'expression régulière dans votre script ! ! !


2) Problème ArgumentCountError non détecté
Le deuxième problème est que la fonction php set_error_handler où est supprimé le dernier paramètre dans PHP 8.0.0.
La fonction de rappel nécessite cinq arguments, mais elle n'obtient que quatre arguments, donc l'appel échoue avec PHP Fatal error: Uncaught ArgumentCountError: Too Fewarguments to function error_handler( ),4 项通过,正好 5 项预期.

Solution :
Recherchez set_error_handler( 调用并找到引用的回调函数 error_handler et rendez le dernier paramètre facultatif.
Dans mon cas c'était dans le script xamppphppearpearcmd.php et la définition de la fonction était à la ligne 446 :

Comparez la définition originale de la fonction :

function error_handler($errno, $errmsg, $file, $line, $vars)

Après avoir appliqué le correctif :

function error_handler($errno, $errmsg, $file, $line, $vars = null)

REMARQUE : J'ai découvert qu'un "bug" a été signalé sur le Apache Friends Support Forumrenvoyé en septembre 2021.


3) Problème de fonction non définie each()
Le troisième problème est que la fonction PHP each() a été supprimée, ce qui renvoie PHP致命错误:未捕获错误:调用未定义的函数each().

Solution
Recherchez toutes les occurrences de every( (使用空格消除结果集中的函数“foreach”),并使用函数 foreach pour vérifier et mettre à jour, en utilisant le fichier de paramètres correct dans chacune.

while Exemple de grammaire

while (list($i, $arg) = each($args)) {

peut être remplacé par

foreach ($args as $i => $arg) {

list Exemple de grammaire

list(,$first) = each($lines);

peut être remplacé par

foreach($lines as $first){}

Il y en a aussi dans la If - else 语句中使用的其他情况,可以用 emtpy($args) 后跟 foreach($args as $opt_arg ){} variable de build $opt_arg.

If - else Exemple de grammaire

if (!strlen($opt_arg) && !(list(, $opt_arg) = each($args))) {

peut être remplacé par

if (!strlen($opt_arg) && !empty($args)) {
       foreach($args as $opt_arg){}

PEAR est enfin disponible avec la version 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
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal