Tutoriel de base de développement PHP Erreur
1. Introduction du problème
Lorsque nous écrivions du code auparavant, nous voyions souvent?: le nom de la fonction était mal écrit et le point-virgule était oublié. . Diverses erreurs seront signalées si la fonction est redéfinie.
Lors du développement, l'affichage des erreurs est très bénéfique à notre développement. Parce que l’affichage des erreurs peut nous aider à localiser rapidement les erreurs et à résoudre les problèmes.
Dans l'environnement de production (c'est-à-dire le réseau public), les sites Web, les microsites, les sites Web mobiles, les interfaces mobiles, etc. sont accessibles aux autres.
Si l'erreur s'affiche, il est facile d'exposer?:
Le chemin du fichier et la spécification de stockage des fichiers du serveur
Certaines personnes que j'aime utiliser des noms personnels et peuvent déduire des mots de passe à l'envers grace à l'ingénierie sociale
Parfois, l'adresse du serveur de base de données MySQL est exposée
... ...et ainsi de suite
Les informations ci-dessus sont particulièrement faciles à utiliser par des personnes ayant des arrière-pensées sur Internet.
Par exemple, dans le code suivant, nous exposons entièrement notre chemin de stockage de fichiers c?té serveur, les informations de framework, etc. sans ajouter de points-virgules. Comme suit?:
<?php $fp = fopen('abc.txt','a+') fwrite($fp,'abc'); fclose($fp); ?>
a signalé une erreur?:
La traduction chinoise du message d'erreur est?:
Erreur d'analyse?: erreur de syntaxe. L'accident s'est produit près de la ligne 5 de fwrite dans le fichier /home/vagrant/Code/Laravel/public/index.php.
Dans ce chapitre, nous essayons de résoudre ce problème
2. Supprimer l'erreur d'affichage
En php. Fichier de configuration .ini. Nous pouvons contr?ler l’état d’affichage des erreurs de php.
Il y a un élément de configuration spécial dans php.ini?:
display_errors
Cette option définit s'il faut afficher les informations d'erreur sur la page Web ou pour l'utilisateur Masquer sans afficher.
L'état de cette valeur est activé ou désactivé, et la valeur peut également être définie sur 1 ou 0.
Si la valeur de display_error est définie sur 0 ou off, l'erreur ne sera pas affichée sur la page. Si elle est définie sur 1 ou on, le message d'erreur sera affiché.
Question?: Que dois-je faire si je n'ai pas l'autorisation d'état pour modifier le php.ini du serveur??
Vous pouvez utiliser ini_set.
<?php ini_set('display_errors' , 0 ); ?>
Le code ci-dessus équivaut également à modifier la valeur de display_errors dans php.ini. Cependant, cela ne prend effet que dans le code php actuel.
Question?: Que dois-je faire si je souhaite obtenir le statut de l'élément de configuration de php.ini??
Vous pouvez utiliser ini_get (élément de paramètre) pour obtenir la valeur du paramètre.
Exemple :
<?php echo '服務(wù)器中display_errors的狀態(tài)為' . ini_get('display_errors'); ?>
Remarque : Après avoir modifié le fichier php.ini, vous devez redémarrer le serveur.
3. Niveau de rapport d'erreurs
Type d'erreur
php tout le monde. L'affichage d'erreur le plus courant?:
Parmi les types ci-dessus?:
l'erreur est la plus grave et doit être résolue. Sinon, le programme ne peut pas continuer à s'exécuter
l'avertissement est également très important. Tong doit également être résolu. Si c’est clair et intentionnel, il n’est pas nécessaire de s’en occuper.
avis Vous pouvez l'ignorer. Mais dans certaines entreprises, les normes des projets sont particulièrement élevées. Il doit également être résolu dans des projets présentant des exigences élevées. Parce que la notification affectera l’efficacité d’exécution de PHP. Cela se produit généralement lorsque la fonction n'est pas définie, etc.
les erreurs d'analyse font référence aux erreurs grammaticales et aux fautes de frappe, qui doivent être résolues
représente toutes les erreurs de tous types
Autres éléments d'erreur qui doivent être compris en fonction de l'expansion ci-dessus?:
Dans le processus d'apprentissage, comprenez simplement les types ci-dessus. Parce que vous ne le rencontrerez pas, si vous le rencontrez, vous pouvez consulter ce livre ou le manuel pour le savoir.
2.error_reporting Type d'erreur de rapport
error_reporting fait référence au rapport d'erreurs. Il existe également un tel paramètre dans php.ini. ce paramètre. Détermine les types d'erreurs que le moteur PHP enregistre, signale et affiche.
1), Définissez le paramètre error_reporting dans php.ini.
Si le paramètre error_reporting est défini sur 0. Les erreurs dans l’ensemble du moteur PHP ne seront ni affichées, ni sorties, ni enregistrées. Il ne sera pas enregistré dans la journalisation qui sera abordée dans le chapitre suivant.
Si nous voulons afficher toutes les erreurs, nous pouvons écrire?:
error_reporting = E_ALL
Si nous voulons afficher toutes les erreurs mais exclure les invites, nous pouvons écrire ce paramètre comme :
error_reporting = E_ALL & ~ E_NOTICE
Affiche toutes les erreurs mais exclut les astuces, la compatibilité et la compatibilité future. Il peut s'écrire comme?:
error_reporting = E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED
2). Dans certains cas, nous n'avons pas l'autorisation d'exploiter le php. ini, mais nous voulons Que dois-je faire pour contr?ler error_reporting ?
Au début du fichier xxxx.php en cours d'exécution, nous pouvons utiliser la fonction error_reporting() pour atteindre l'objectif.
Le code de démonstration est le suivant?:
<?php //關(guān)閉了所有的錯誤顯示 error_reporting(0); //顯示所有錯誤 //error_reporting(E_ALL); //顯示所有錯誤,但不顯示提示 //error_reporting(E_ALL & ~ E_NOTICE); ?>
Vous pouvez essayer le code ci-dessus et essayer d'écrire volontairement le mauvais code. Indique si l'erreur spécifiée sera affichée dans le fichier actuel.
[Développez et comprenez les points de connaissance]?: Le symbole @ est une seule ligne que nous avons apprise auparavant et qui n'affiche pas d'erreurs. Veuillez ne pas utiliser le symbole @ ou l'utiliser avec parcimonie.
Lisons un fichier inexistant et démontrons le processus d'implémentation avec ce code PHP?:
<?php //讀取一個不存在的adsaf.txt文件,用@符抑制錯誤 @$fp = fopen('adsaf.txt','r'); ?> @符效率較低,它在php內(nèi)核中的實現(xiàn)過程是: <?php //關(guān)閉錯誤 error_reporting(0); //讀取一個不存在的文件,顯示錯誤 //顯示錯誤 error_reporting(E_ALL & ~ E_NOTICE); ?>
4. Dans certaines entreprises, il existe des systèmes spéciaux de collecte des journaux. Le système de collecte de journaux vous aidera silencieusement à collecter les erreurs, les avertissements et les invites en coulisse.
Certaines entreprises ne disposent pas non plus d'un système de collecte de journaux dédié et collectent les journaux en cours d'exécution à partir du serveur via des fichiers.
Parmi eux?: les erreurs et avertissements PHP doivent être collectés.
Ensuite, la question se pose?: si le niveau de rapport d'erreurs est défini bien avant que les utilisateurs puissent le voir, comment collecter les erreurs dans le système de journalisation??
Voici les éléments de configuration pertinents qui doivent être utilisés dans php.ini. Ces deux éléments de configuration sont?:
Explication?:
Les log_errors et log_errors_max_len dans le tableau sont très faciles à comprendre.
Et error_log précise le chemin sur lequel les erreurs seront stockées. Le syslog dans les éléments de configuration peut être un peu difficile à comprendre. syslog fait référence à l'enregistrement du système. Le système Windows se trouve dans le collecteur de journaux de l'ordinateur. Linux par défaut est?: /etc/syslog.conf
[Extended] Découvrez les points de connaissances. Si le système Linux est démarré ou si la collecte de journaux est modifiée. Peut être stocké sur des serveurs de collecte de journaux dédiés tiers.
De plus, PHP a également spécialement préparé une fonction de journal d'erreurs personnalisée pour nous?:
bool error_log ( string $ error message [, int $ error message type = 0 [, string $ storage Target] ] )
Cette fonction peut envoyer des informations d'erreur au journal des erreurs du serveur Web ou à un fichier.
Types de messages d'erreur couramment utilisés?:
Exemple?:
<?php //無法連接到數(shù)據(jù)庫服務(wù)器,直接記錄到php.ini 中的error_log指定位置 error_log("無法連接到數(shù)據(jù)庫服務(wù)器服務(wù)器"); //可以發(fā)送郵件,但是php.ini必須配置過郵件系統(tǒng) error_log('可以用郵件報告錯誤,讓運維人員半夜起床干活',1 ,'liwenkai@phpxy.com'); //記錄在指定的位置 error_log("我是一個錯誤喲", 3, "d:/test/my-errors.log"); ?>
Remarque?: l'envoi d'e-mails dans
error_log peut ne pas être familier aux débutants, vous n'avez donc pas besoin de ma?triser certaines connaissances.
5. Fonction de gestion des erreurs personnalisée
Le point de départ de cette connaissance est un peu élevé. La plupart des gens n’ont aucune expérience en ingénierie logicielle ou en gestion personnalisée des erreurs, et il est difficile d’imaginer des scénarios d’utilisation. Si vous souhaitez ignorer ce bloc d’apprentissage, vous le pouvez et nous le soutenons.
Ce point de connaissance n'a pas beaucoup de scénarios d'application pratiques. Si vous envisagez de commencer à écrire votre propre framework, ou si vous avez terminé le premier projet de ce livre.
Deux fonctions couramment utilisées pour les erreurs définies par l'utilisateur?:
set_error_handler (fonction de gestion des erreurs $callback appelable)
Définir une fonction de gestion des erreurs définie par l'utilisateur
trigger_error (string $error_msg)
Générer un message d'erreur/d'avertissement/d'avertissement au niveau de l'utilisateur
<?php //定義一個自定義的錯誤處理函數(shù) function customError($errno, $errstr, $errfile, $errline) { //輸出錯誤消息 echo "<b>Custom error:</b> [$errno] $errstr<br />"; //輸出錯誤文件和錯誤行 echo "Error on line $errline in $errfile<br />"; echo "Ending Script"; //中止程序運行 exit; } //使用set_error_handler 綁定用戶自定義函數(shù) set_error_handler("customError"); $test=2; //觸發(fā)自定義錯誤 if ($test > 1) { trigger_error("A custom error has been triggered"); } ?>