Depuis que ma machine utilise la mise à jour continue d'Archlinux, Php a été mis à niveau vers la version 7.4 sans le savoir, cette mise à jour a posé de gros problèmes. Tout d'abord, la nouvelle option ProtectHome de Php-fpm provoquera l'erreur classique File not found, puis l'interpréteur Php signalera directement une erreur en essayant d'accéder au décalage du tableau sur une valeur de type null pour un accès en indice de type null.
Récemment, j'aidais un ami à créer un site Web, j'ai donc renvoyé le code en ligne vers le miroir local pour le tester. Parce que l'application Web a des dépendances étranges, afin de ne pas polluer l'environnement local, je l'ai déployée dans Docker pour des tests. L'image de base de Docker choisit le radical Archlinux, associé à Php7.4, sorti à la fin du mois dernier. J'ai donc passé tout un après-midi coincé dans la fosse de débogage...
Tout d'abord, après avoir configuré l'environnement avec une navette, je l'ai exécuté et j'ai signalé une des erreurs les plus classiques et les plus ennuyeuses de Php- fpm : fichier introuvable. Quiconque a configuré Php-fpm sait que cette erreur est généralement causée par des autorisations de fichiers incorrectes ou des chemins de fichiers incorrects, et ces deux erreurs sont relativement difficiles à trouver. J'ai donc à nouveau expérimenté l'inspection du chemin avec de grands yeux et de petits yeux, et il n'y a eu aucun problème. Vérification des autorisations de fichiers, euh, il n'y a pas de problème ? Je suis revenu et j'ai vérifié le chemin, et c'était toujours OK ! J'étais tellement frustré que chmod 777 n'ait pas réussi à résoudre le problème. J'avais un peu de doute sur ma vie...
J'ai recherché l'erreur Fichier non trouvé de Php-fpm en ligne. il n'y avait que ces deux raisons. Et ces deux raisons ont été éliminées une à une, et les choses se sont soudainement développées sous un angle magique...
Je ne sais pas combien de temps il a fallu avant de penser que cela pouvait être lié à la version Php (car sur ma machine native, j'exécutais également d'autres applications Php, donc je ne pensais pas qu'il y avait un problème avec Php au début). J'ai donc recherché les modifications dans la nouvelle version de Php7.4 et Php-fpm7.4, et j'ai immédiatement trouvé le coupable :
Php7.4 Commit
(https:/ / github.com/php/php-src/commit/40c4d7f1820df1872a71ab07fd26da45a203e37f#diff-c0605c0e7e1db864472acf66a9812d33R22)
Une option a été ajoutée à ce commit : Protect Home. Comme son nom l'indique, lorsqu'il est activé, PHP n'exécutera pas les fichiers du répertoire personnel - et la valeur par défaut de cette nouvelle option est activée. Utilisez systemctl edit php-fpm.service pour ajouter une option de remplacement Après avoir redémarré le service, tout est enfin normal, et la deuxième grosse erreur arrive :
Inlcude, require, etc. sont souvent utilisés en Php pour inclure. d'autres fichiers. Le débogage a révélé qu'après une certaine inclusion, PHP arrêtait directement l'exécution et signalait une erreur en essayant d'accéder au décalage du tableau sur une valeur de type null. Mais le code en ligne s'est exécuté sans aucun problème, ce qui était très étrange. Après avoir suivi le fichier d'inclusion, j'ai découvert qu'il y avait un endroit où les éléments du tableau étaient accessibles, mais que le tableau lui-même était nul. Cette syntaxe est généralement prise en charge dans les langages faiblement typés comme Php, et elle renverra null dans son ensemble, mais dans la nouvelle version de Php7.4, cette syntaxe sera signalée comme une erreur. Il semble que Php standardise également un peu les caractéristiques du langage. Je n'ai pas d'autre choix que de changer le code moi-même. (Bien que je choisisse actuellement d'utiliser l'ancienne version de Php)
Depuis que Php7.4 est sorti il n'y a pas si longtemps, on estime qu'il n'a pas été largement mis à jour et utilisé, et les développeurs de diverses applications pourraient ne pas ont testé Php7.4 et les modifications compatibles. C'est précisément pour cette raison que lors de la recherche de ces informations sur Internet, je n'ai trouvé aucune suggestion utile. En plus d'enregistrer tout l'après-midi où j'ai été trompé par cette nouvelle fonctionnalité, cet article fournit également à d'autres personnes une idée de solution. problèmes similaires.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!