Le contenu de cet article est de partager avec vous une brève analyse de la gestion des erreurs PHP, du chargement automatique, de la mémoire de la pile et du mode de fonctionnement. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. 🎜>
PhpGestion des erreurs
PhpNiveau d'erreur :
E_ERROR est une erreur fatale qui mettra fin au script. La valeur est 1E_WARNING Erreur d'avertissement, donne une invite et ne mettra pas fin à l'opération.
E_PARSE Les erreurs d'analyse de syntaxe lors de la compilation sont uniquement. généré par l’analyseur. La valeur est 4
E_NOTICE notifie les erreurs pendant l'exécution, indiquant que le script peut rencontrer des erreurs. La valeur est 8
E_CORE_ERROR lors de l'initialisation de PHP. startup Une erreur fatale s'est produite pendant le processus. Cette erreur est similaire à E_ERROR, mais est générée par le cœur du moteur PHP. La valeur est 16
E_CORE_WARNING Un avertissement (erreur non fatale) survenu lors du démarrage de l'initialisation de PHP. Similaire à E_WARNING, mais généré par le cœur du moteur PHP. La valeur est 32
E_COMPILE_ERROR Erreur fatale à la compilation. Similaire à E_ERROR, mais généré par le moteur de script Zend. La valeur est 64
E_COMPILE_WARNING avertissement au moment de la compilation (erreur non fatale). Similaire à E_WARNING, mais généré par le moteur de script Zend. La valeur est 128
E_USER_ERROR Message d'erreur généré par l'utilisateur. Similaire à E_ERROR, mais est généré par l'utilisateur à l'aide de la fonction PHP trigger_error() dans le code. La valeur est 256
E_USER_WARNING Message d'avertissement généré par l'utilisateur. Similaire à E_WARNING, mais est généré par l'utilisateur à l'aide de la fonction PHP trigger_error() dans le code. La valeur est 512
E_USER_NOTICE Informations de notification générées par l'utilisateur. Similaire à E_NOTICE, mais est généré par l'utilisateur à l'aide de la fonction PHP trigger_error() dans le code. La valeur 1024
E_STRICT permet à PHP de suggérer des modifications au code pour assurer la meilleure interopérabilité et compatibilité ascendante du code. La valeur est 2048
E_RECOVERABLE_ERROR, une erreur fatale qui peut être détectée. Cela indique qu'une erreur potentiellement dangereuse s'est produite, mais n'a pas rendu le moteur PHP instable. Si l'erreur n'est pas détectée par un gestionnaire défini par l'utilisateur (voir set_error_handler()), elle deviendra un E_ERROR et le script se terminera. La valeur est 4096
Notification d'exécution E_DEPRECATED. Lorsqu'il est activé, un avertissement sera émis concernant le code qui pourrait ne pas fonctionner correctement dans les versions futures. La valeur est 8192
E_USER_DEPRECATED Message d'avertissement généré par l'utilisateur. Similaire à E_DEPRECATED, mais est généré par l'utilisateur à l'aide de la fonction PHP trigger_error() dans le code. La valeur 16384
E_ALL représente toutes les informations d'erreur et d'avertissement à l'exception de E_STRICT. La valeur est 30719
Erreurs affichées ou masquées à l'aide de combinaisons d'opérateurs au niveau du bit (jugement d'autorisation binaire)
PhpÀ propos de la configuration des erreurs
error_reporting Définir le niveau de rapport d'erreurs, Le niveau le paramètre peut être vu ci-dessus
La valeur par défaut est E_ALL & ~E_NOTICE, ce qui signifie que toutes les erreurs sauf E_NOTICE et E_STRICT seront affichéesLe niveau d'erreur E_STRICT n'est pas inclus dans E_ALL Vous devez explicitement activer ce niveau pour apparaître
Il n'y a aucun moyen de le faire. utiliser des constantes de niveau d'erreur en dehors de PHP Significatif, vous pouvez utiliser des nombres décimaux à la place, tels que 2147483647, y compris toutes les erreurs
display_errors S'il faut afficher les erreurs dans le screen
Bien que vous puissiez utiliser ini_set pour le réinitialiser, il ne peut pas être défini lorsqu'une erreur fatale se produit dans php
display_startup_errors S'il faut afficher les erreurs au démarrage
log_errors S'il faut enregistrer les informations d'erreur du script dans log
log_errors_max_len Définissez le nombre maximum d'octets dans log_errors. Les informations sur la source de l'erreur seront ajoutées à error_log. La valeur par défaut est 1024. Si la valeur est 0, il n'y a aucune limite à la longueur. Ce paramètre de longueur limite les erreurs enregistrées, les erreurs affichées et $php_errormsg. ignore_repeated_errors Ne pas enregistrer les messages d'erreur répétés, ignore_repeated_source Lorsque vous ignorez les messages répétés, la source du message est également ignorée. Lorsque ce paramètre est activé, les messages en double n'enregistreront pas s'ils ont été générés par des fichiers différents ou des lignes différentes de code source. report_memleaks Si ce paramètre est défini sur Off, les informations de fuite de mémoire ne seront pas affichées (dans stdout ou journal au milieu). Ce rapport sera envoyé à stderr sur les plateformes Posix. Sous Windows, il sera envoyé au débogueur à l'aide de OutputDebugString(), et pourra être consulté avec des outils comme » DbgView. Ceci n'est efficace que pour la compilation de débogage, et error_reporting doit contenir E_WARNING pour fonctionner track_errors si activé, la dernière erreur existera toujours dans la variable $php_errormsg. html_errors Fermez la balise HTML dans le message d'erreur. Ce nouveau message d'erreur au format HTML est cliquable et dirige l'utilisateur vers une page de référence qui décrit l'erreur ou la fonction à l'origine de l'erreur. Ces références concernent les paramètres de docref_root et docref_ext. error_prepend_string string Le contenu affiché avant le message d'erreur. error_append_string string Le contenu affiché après le message d'erreur. error_log Définit le fichier dans lequel les erreurs de script seront enregistrées. Le fichier doit être accessible en écriture par l'utilisateur du serveur Web. Si la valeur spéciale syslog est définie, des messages d'erreur sont envoyés au consignateur système. Sous Unix et les systèmes similaires, syslog(3) est utilisé, et sur les systèmes de type Windows NT, le journal des événements est utilisé. La journalisation système n'est pas prise en charge sous Windows 95. Voir : syslog(). Si cette configuration n'est pas définie, les messages d'erreur sont envoyés au journal d'erreurs SAPI. Par exemple, apparaît dans le journal des erreurs d'Apache ou est envoyé à stderr dans la CLI.
Compréhension personnelle des méthodes et de l'utilisation liées à la gestion des erreurs debug_backtrace - Générer une trace arrière (backtrace). Vous pouvez définir des paramètres pour limiter le nombre de piles renvoyées peut trouver les informations de pile lors de l'appel de la fonction, ce qui est très utile pour. dépannage, et le débogage de tp est similaire à debug_print_backtrace(); imprime le traceback directement, similaire à debug_backtrace, error_clear_last — efface le dernier error error_get_last — Obtenez la dernière erreur survenue error_log — Envoyez le message d'erreur à un endroit, vous pouvez enregistrer l'erreur dans un fichier, mais le message d'erreur ne peut pas être nul. Restaurez la fonction de gestion des erreurs précédente, restore_exception_handler — Restaurez la fonction de gestion des exceptions précédemment définie. Les erreurs des niveaux suivants ne peuvent pas être définies par la fonction utilisateur pour gérer : E_ERROR, E_PARSE, E_CORE_ERROR, E_CORE_WARNING, E_COMPILE_ERROR, E_COMPILE_WARNING et la plupart des E_STRICT générés dans le fichier où la fonction set_error_handler() est appelée. Tout comme le paramètre ini de error_reporting peut contrôler l'affichage des erreurs, le deuxième paramètre peut être utilisé pour bloquer le déclenchement de error_handler. Sans ce masque, error_handler sera appelé à chaque erreur, quelle que soit la manière dont error_reporting est défini. set_exception_handler — Définir la fonction de gestion des exceptions définie par l'utilisateur trigger_error — Générer un message d'erreur/d'avertissement/de notification au niveau de l'utilisateur user_error — alias pour trigger_error register_shutdown_function est une fonction d'enregistrement exécutée après le script de terminaison PHP. Le premier paramètre prend en charge la fonction, et un tableau contenant des instructions pour instancier la classe et les méthodes de classe (la classe sera instanciée en premier lors de l'enregistrement (tant que le) ; l'inscription est réussie, toute erreur peut être capturée) Php Chargement automatique Opinion personnelle La principale différence entre spl_autoload_register et __autoload est __autoload C'est juste qu'une fonction ne peut être définie qu'une seule fois en php. Si vous souhaitez charger des plug-ins, etc., vous devez constamment faire des jugements if else ou composer, ce qui sera très gênant spl_autoload_register peut être basé sur le dossier, ou un plug-in, personnaliser diverses fonctions de traitement, créer une file d'attente chargée automatiquement et continuer à rechercher en fonction de la file d'attente jusqu'à ce que la file d'attente soit terminée ou renvoie vrai ( le retour par défaut de true lorsqu'un fichier est trouvé)
Mémoire de la pile( Compréhension personnelle) Heap : Pile : Quelques variables de type de base définies dans les fonctions et les variables de référence des objets sont toutes dans l'espace de pile. Lorsqu'elles dépassent la portée, elles seront automatiquement publiées Supplément d'information : Tas : Lorsque les variables définies dans le fichier sont modifiées statiquement, elles seront remplacées par la zone de données globales et ne seront pas occuper la mémoire de la pile Stack: La mémoire de la pile stocke généralement les informations d'appel de fonction et variables déclarées dans la fonction. Étant donné que les appels de fonction sont récursifs, la fonction externe doit être appelée avant la fonction interne. La fonction est chargée et exécutée en premier, et elle doit attendre que la fonction interne appelée soit terminée avant de pouvoir se terminer. -le mécanisme de dernière sortie est la raison pour laquelle on l'appelle mémoire de pile. PS : Lors de la compilation, le compilateur va d'abord collecter toutes les variables définies dans cette fonction et les mettre au début de la fonction pour demander de la mémoire, donc l'ordre dans lequel elles sont affiché et retiré de la pile n'est pas ce que vous écrivez. L'ordre du programme est défini, mais la pile est poussée vers l'avant lorsque la fonction est exécutée et est sortie une fois l'exécution de la fonction terminée. Autres : Const, global et statique sont tous stockés dans des données globales après modification Zone Les variables super globales et les variables globales sont toutes des variables statiques et sont stockées dans la zone de données globales Il y a moins d'informations. et attend une correction et une amélioration PhpwebMode Exécution . PhpMode d'exécution : 1 ) Les CGI (Common Gateway Interface/Common Gateway Interface) sont généralement des programmes exécutables, tels que des fichiers EXE, et les serveurs WEB occupent chacun des processus différents, et généralement un programme CGI ne peut en gérer qu'un seul. demande de l'utilisateur. De cette façon, lorsque le nombre de requêtes utilisateur est très important, cela occupera une grande quantité de ressources système, telles que la mémoire, le temps CPU, etc., ce qui entraînera de faibles performances. FastCGI (Résident CGI / Long-Live CGI) FastCGI est une version améliorée de FastCGI est comme un CGI de longue durée. Elle peut être exécutée à tout moment, tant qu'elle est activée, il ne faudra pas de temps pour Fork à chaque fois (c'est la chose la plus critiquée à propos de CGI). mode fork-and-execute). FastCGI est une interface évolutive et haut débit pour la communication entre les serveurs HTTP et les langages de script dynamiques. Les serveurs HTTP les plus populaires prennent en charge FastCGI, notamment Apache, Nginx et lighttpd. Dans le même temps, FastCGI est également pris en charge par de nombreux langages de script, notamment PHP. Le mode d'interface FastCGI adopte une structure C/S, qui peut séparer le serveur HTTP et le serveur d'analyse de script, et démarrer un ou plusieurs démons d'analyse de script sur le serveur d'analyse de script. Chaque fois que le serveur HTTP rencontre un programme dynamique, celui-ci peut être transmis directement au processus FastCGI pour exécution, puis le résultat est renvoyé au navigateur. Cette méthode permet au serveur HTTP de traiter exclusivement les requêtes statiques ou de renvoyer les résultats du serveur de script dynamique au client, ce qui améliore considérablement les performances de l'ensemble du système d'application. Php-fpm est le gestionnaire fastcgi fourni avec PHP 3) CLI (Command Line Run/Command Line Interface) 4. Mode module Web (le mode dans lequel les serveurs Web tels que Apache run) Ce mode est une extension d'Apache basée sur cgi
5. ISAPI (Internet Server Application Program Interface) est un ensemble d'interfaces API pour les services WEB fournis par Microsoft, qui peuvent implémenter ce CGI fournit Toutes les fonctions ont été étendues sur cette base, comme la fourniture d'une interface d'application de filtre. Les applications ISAPI sont principalement utilisées sous la forme de bibliothèques dynamiques DLL, qui peuvent être exécutées après avoir été demandées par l'utilisateur. Elles ne disparaîtront pas immédiatement après le traitement d'une demande de l'utilisateur, mais continueront à résider dans la mémoire et attendront les autres entrées de l'utilisateur. être traité. De plus, l'application ISAPI DLL et le serveur WEB sont dans le même processus, et l'efficacité est nettement supérieure à celle de CGI.
Php2 espèces et webInteraction du serveur :
Nginx : L'utilisateur lance une requête et utilise la poignée de main actuelle de nginx. Lorsque nginx la reçoit, il la transmet à php-fpm pour traitement. Lorsque php-fpm est occupé, nginx renvoie 504 getway Apache : Apache dispose de 3 modes de fonctionnement, prefork, worker, Event, Créer différents processus selon différents modes Lorsque les processus et les threads reçoivent le php pertinent, ils sont transmis au module Apache pour traitement
set_error_handler — Définir la fonction de gestion des erreurs définie par l'utilisateur, qui doit être définie avant l'erreur
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!