-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathError.php
181 lines (137 loc) · 4.58 KB
/
Error.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
<?php
declare(strict_types=1);
/*
* This file is part of the QuidPHP package <https://quidphp.com>
* Author: Pierre-Philippe Emond <emondpph@gmail.com>
* License: https://github.com/quidphp/base/blob/master/LICENSE
*/
namespace Quid\Base;
// error
// class with methods a layer over the native PHP error functions and handler
final class Error extends Root
{
// config
protected static array $config = [];
// setHandler
// lie une callable comme gestionnaire d'erreur
// si la valeur passé est null, le handler est remis à son état initial
final public static function setHandler(?callable $value=null,int $type=E_ALL | E_STRICT):void
{
set_error_handler($value,$type);
}
// restoreHandler
// remet le handler à ce qu'il était avant le dernière appel à set
final public static function restoreHandler():bool
{
return restore_error_handler();
}
// last
// retourne les informations sur la dernière erreur
final public static function last():?array
{
return error_get_last();
}
// clearLast
// efface les informations sur la dernière erreur
final public static function clearLast():void
{
error_clear_last();
}
// log
// log une erreur à l'endroit défini dans error_log
final public static function log($message):bool
{
return error_log(self::logPrepareMessage($message),0);
}
// logEmail
// log une erreur et envoie par email
final public static function logEmail($message,string $email,string $headers=''):bool
{
$return = false;
if(Validate::isEmail($email))
$return = error_log(self::logPrepareMessage($message),1,$email,$headers);
return $return;
}
// logFile
// log une erreur dans un autre fichier que celui par défaut
// accepte des chemins (pas besoin d'exister) ou des resources
final public static function logFile($message,$path):bool
{
$return = false;
if(Res::is($path))
$path = Res::uri($path);
if(Finder::isWritableOrCreatable($path))
$return = error_log(self::logPrepareMessage($message),3,$path);
return $return;
}
// logPrepareMessage
// prépare le message en fonction de la fonction error_log
final public static function logPrepareMessage($value):string
{
$return = '';
if(is_scalar($value))
$return = (string) $value;
elseif(is_array($value))
{
foreach ($value as $v)
{
if(is_scalar($v))
{
$return .= (strlen($return))? ' ':'';
$return .= (string) $v;
}
}
}
return $return;
}
// trigger
// génère une erreur, le type est par défaut E_USER_ERROR
// aucune erreur de générer si le tableau est vide ou si le message final n'est pas string
final public static function trigger($value,int $type=E_USER_ERROR):bool
{
$return = false;
if(is_array($value) && !empty($value))
$value = Arr::implodeTrimClean(' -> ',$value);
if(is_string($value))
$return = trigger_error($value,$type);
return $return;
}
// triggers
// tente de générer des erreurs à partir de différentes valeurs
// aucune erreur de générer si le tableau est vide ou si le message final n'est pas string
final public static function triggers(...$values):bool
{
return Arr::some($values,fn($value) => self::trigger($value));
}
// reporting
// retourne le niveau actuel de error reporting
final public static function reporting():int
{
return error_reporting();
}
// getCodes
// retourne le tableau de codes, mergé avec celui de lang au besoin
final public static function getCodes(?string $lang=null):array
{
return Arr::plus(Lang\En::getConfig('error/code'),Lang::errorCode(null,$lang));
}
// code
// cette fonctionne retourne le nom associé au code erreur de PHP
final public static function code(int $code,?string $lang=null):?string
{
$return = null;
$codes = self::getCodes($lang);
if(array_key_exists($code,$codes))
$return = $codes[$code];
return $return;
}
// init
// initialise la prise en charge des erreurs
final public static function init():void
{
Uri::setNotFound([self::class,'trigger']);
File::setNotFound([self::class,'trigger']);
Obj::setCastError([self::class,'trigger']);
}
}
?>