Tutoriel de bas...LOGIN

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 grâce à 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 :

59.png

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 '服务器中display_errors的状态为' . 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 :


60.png


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 :


61.png


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
//关闭了所有的错误显示
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内核中的实现过程是:
<?php
//关闭错误
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 :

62.png


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 :


63.png


Exemple :

<?php
//无法连接到数据库服务器,直接记录到php.ini 中的error_log指定位置
error_log("无法连接到数据库服务器服务器");
//可以发送邮件,但是php.ini必须配置过邮件系统
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
//定义一个自定义的错误处理函数
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 绑定用户自定义函数
set_error_handler("customError");
$test=2;
//触发自定义错误
if ($test > 1) {
    trigger_error("A custom error has been triggered");
}
?>


section suivante
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>php.cn</title> </head> <body> <?php echo "Hello World!!!"; ?> </body> </html>
soumettreRéinitialiser le code
chapitredidacticiel