Skip to content

Commit 20a548e

Browse files
committed
定版
1 parent 864946e commit 20a548e

File tree

3 files changed

+51
-28
lines changed

3 files changed

+51
-28
lines changed

README.md

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,4 +23,10 @@ error_reporting = E_ALL & E_STRICT
2323
```
2424

2525
# 使用
26-
请参考 tests 用例
26+
```php
27+
$baseDir = dirname(__DIR__);
28+
29+
require $baseDir.'/vendor/autoload.php';
30+
31+
$errorHandler = \PHPErrors\PHPErrors::enable(E_ALL, true);
32+
```

src/PHPErrors.php

Lines changed: 31 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -16,28 +16,26 @@
1616
class PHPErrors
1717
{
1818
public $logger;
19-
public static $reportLevel = E_ALL;
19+
public $displayErrors = false;
20+
public static $errorReportLevel = E_ALL;
2021

21-
public static function enable($errorReportLevel = E_ALL, $devMode = true)
22+
public function __construct($displayErrors = false)
23+
{
24+
$this->displayErrors = $displayErrors;
25+
}
26+
27+
public static function enable($errorReportLevel = E_ALL, $displayErrors = false)
2228
{
2329
if ($errorReportLevel != null) {
2430
error_reporting($errorReportLevel);
25-
self::$reportLevel = $errorReportLevel;
31+
self::$errorReportLevel = $errorReportLevel;
2632
} else {
2733
error_reporting(E_ALL);
2834
}
2935

30-
if ($devMode) {
31-
ini_set('display_errors', 1);
32-
ini_set('display_startup_errors', 1);
33-
} else {
34-
ini_set('display_errors', 0);
35-
ini_set('display_startup_errors', 0);
36-
}
37-
3836
ini_set('log_errors', 1);
3937

40-
$handler = new static();
38+
$handler = new static($displayErrors);
4139
return $handler->register();
4240
}
4341

@@ -55,10 +53,14 @@ public function log($type, $message)
5553
$level = $this->getErrorLevel($type);
5654

5755
if ( $this->logger != null ) {
58-
return $this->logger->log($level, $message);
56+
$this->logger->log($level, $message);
57+
} else {
58+
error_log("{$level}: {$message}");
5959
}
6060

61-
error_log("{$level}: {$message}");
61+
if ( $this->displayErrors ) {
62+
print "{$level}: {$message}";
63+
}
6264
}
6365

6466
public function setLogger($logger)
@@ -73,43 +75,48 @@ public function handleFatalError()
7375
if (!empty($error)) {
7476
$type = $error['type'];
7577

76-
if ($type & self::$reportLevel) {
78+
if ($type & self::$errorReportLevel) {
7779
$message = $this->formatMessage($error['message'], $error['file'], $error['line']);
7880

79-
return $this->log($type, $message);
81+
$this->log($type, $message);
8082
}
8183
}
8284
}
8385

8486
public function handleError($type, $message, $file, $line)
8587
{
86-
if ($type & self::$reportLevel) {
88+
if ($type & self::$errorReportLevel) {
8789
$message = $this->formatMessage($message, $file, $line);
8890

89-
return $this->log($type, $message);
91+
$this->log($type, $message);
9092
}
9193
}
9294

9395
public function handleException(\Throwable $exception)
9496
{
95-
//Error code 需要转换成 Exception 的错误级别
96-
//这里把所有的 Error 都转换成 E_ERROR 级别异常, 用来做捕获
97+
//把所有Error都当做成是致命的错误处理
9798
if ($exception instanceof \Error) {
98-
$exception = new \ErrorException($exception->getMessage(), 0, E_ERROR, $exception->getFile(), $exception->getLine());
99+
$exception = new \ErrorException(
100+
$exception->getMessage(),
101+
$exception->getCode(),
102+
E_ERROR,
103+
$exception->getFile(),
104+
$exception->getLine()
105+
);
99106
}
100107

101-
if ($exception instanceof \ErrorException || $exception instanceof \Exception) {
108+
if ($exception instanceof \Exception) {
102109
$type = $exception instanceof \ErrorException ? $exception->getSeverity() : E_ERROR;
103110

104-
if ($type & self::$reportLevel) {
111+
if ($type & self::$errorReportLevel) {
105112
$message = $this->formatMessage(
106113
$exception->getMessage(),
107114
$exception->getFile(),
108115
$exception->getLine(),
109116
$exception->getTraceAsString()
110117
);
111118

112-
return $this->log($type, $message);
119+
$this->log($type, $message);
113120
}
114121
}
115122
}

tests/PHPErrorsTest.php

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
require $baseDir.'/vendor/autoload.php';
55

6-
$errorHandler = \PHPErrors\PHPErrors::enable(E_ALL & ~E_ERROR, false);
6+
$errorHandler = \PHPErrors\PHPErrors::enable(E_ALL & ~E_WARNING, true);
77

88
//$logger = new \Monolog\Logger("test");
99
//$logger->pushHandler(new \Monolog\Handler\StreamHandler(__DIR__."/test.log"));
@@ -12,5 +12,15 @@
1212

1313

1414
//test error
15-
echo $x; //E_NOTICE
16-
$fatal->error(); //E_ERROR
15+
$a = 1/0;
16+
echo @$x; //E_NOTICE
17+
@$fatal->error(); //E_ERROR
18+
//echo $y;
19+
20+
//throw new \Exception("dfdsd");
21+
22+
try {
23+
throw new \Exception("dfdsd");
24+
} catch (\Exception $e) {
25+
26+
}

0 commit comments

Comments
 (0)