feat:examples:swoole协程不支持set_exception_handler,因此set_error_handler内部逻辑只打印,不做\Error对象转换,避免出现Uncaught Error

This commit is contained in:
liujian 2021-09-16 14:37:38 +08:00
parent 7212892fc6
commit d1557c5e5b
9 changed files with 14 additions and 69 deletions

View File

@ -2,7 +2,7 @@
<?php
ini_set('display_errors', 'on');
ini_set('display_startup_errors', 'on');
ini_set('error_reporting', E_ALL ^ (E_NOTICE | E_WARNING));
ini_set('error_reporting', E_ALL ^ E_NOTICE);
ini_set('memory_limit', '1G');
require __DIR__ . '/../vendor/autoload.php';

View File

@ -36,25 +36,14 @@ class Error
{
if (error_reporting() & $errno) {
// 委托给异常处理
$isFatalWarning = function ($errno, $errstr) {
if ($errno == E_WARNING && strpos($errstr, 'require') === 0) {
return true;
}
return false;
};
if ($isFatalWarning($errno, $errstr)) {
$this->exception(new \Error(sprintf('%s in %s on line %d', $errstr, $errfile, $errline), $errno));
return;
}
// 转换为异常抛出
throw new \Error(sprintf('%s in %s on line %d', $errstr, $errfile, $errline), $errno);
$this->exception(new \Error(sprintf('%s in %s on line %d', $errstr, $errfile, $errline), $errno));
}
}
public function shutdown(): void
{
$isFatal = function ($errno) {
return in_array($errno, [E_ERROR, E_CORE_ERROR, E_COMPILE_ERROR, E_PARSE]);
return in_array($errno, [E_ERROR, E_PARSE, E_CORE_ERROR, E_CORE_WARNING, E_COMPILE_ERROR, E_COMPILE_WARNING]);
};
if (!is_null($error = error_get_last()) && $isFatal($error['type'])) {
// 委托给异常处理

View File

@ -36,25 +36,14 @@ class Error
{
if (error_reporting() & $errno) {
// 委托给异常处理
$isFatalWarning = function ($errno, $errstr) {
if ($errno == E_WARNING && strpos($errstr, 'require') === 0) {
return true;
}
return false;
};
if ($isFatalWarning($errno, $errstr)) {
$this->exception(new \Error(sprintf('%s in %s on line %d', $errstr, $errfile, $errline), $errno));
return;
}
// 转换为异常抛出
throw new \Error(sprintf('%s in %s on line %d', $errstr, $errfile, $errline), $errno);
$this->exception(new \Error(sprintf('%s in %s on line %d', $errstr, $errfile, $errline), $errno));
}
}
public function shutdown(): void
{
$isFatal = function ($errno) {
return in_array($errno, [E_ERROR, E_CORE_ERROR, E_COMPILE_ERROR, E_PARSE]);
return in_array($errno, [E_ERROR, E_PARSE, E_CORE_ERROR, E_CORE_WARNING, E_COMPILE_ERROR, E_COMPILE_WARNING]);
};
if (!is_null($error = error_get_last()) && $isFatal($error['type'])) {
// 委托给异常处理

View File

@ -2,7 +2,7 @@
<?php
ini_set('display_errors', 'on');
ini_set('display_startup_errors', 'on');
ini_set('error_reporting', E_ALL ^ (E_NOTICE | E_WARNING));
ini_set('error_reporting', E_ALL ^ E_NOTICE);
ini_set('memory_limit', '1G');
require __DIR__ . '/../vendor/autoload.php';

View File

@ -36,25 +36,14 @@ class Error
{
if (error_reporting() & $errno) {
// 委托给异常处理
$isFatalWarning = function ($errno, $errstr) {
if ($errno == E_WARNING && strpos($errstr, 'require') === 0) {
return true;
}
return false;
};
if ($isFatalWarning($errno, $errstr)) {
$this->exception(new \Error(sprintf('%s in %s on line %d', $errstr, $errfile, $errline), $errno));
return;
}
// 转换为异常抛出
throw new \Error(sprintf('%s in %s on line %d', $errstr, $errfile, $errline), $errno);
$this->exception(new \Error(sprintf('%s in %s on line %d', $errstr, $errfile, $errline), $errno));
}
}
public function shutdown(): void
{
$isFatal = function ($errno) {
return in_array($errno, [E_ERROR, E_CORE_ERROR, E_COMPILE_ERROR, E_PARSE]);
return in_array($errno, [E_ERROR, E_PARSE, E_CORE_ERROR, E_CORE_WARNING, E_COMPILE_ERROR, E_COMPILE_WARNING]);
};
if (!is_null($error = error_get_last()) && $isFatal($error['type'])) {
// 委托给异常处理

View File

@ -2,7 +2,7 @@
<?php
ini_set('display_errors', 'on');
ini_set('display_startup_errors', 'on');
ini_set('error_reporting', E_ALL ^ (E_NOTICE | E_WARNING));
ini_set('error_reporting', E_ALL ^ E_NOTICE);
ini_set('memory_limit', '1G');
require __DIR__ . '/../vendor/autoload.php';

View File

@ -36,25 +36,14 @@ class Error
{
if (error_reporting() & $errno) {
// 委托给异常处理
$isFatalWarning = function ($errno, $errstr) {
if ($errno == E_WARNING && strpos($errstr, 'require') === 0) {
return true;
}
return false;
};
if ($isFatalWarning($errno, $errstr)) {
$this->exception(new \Error(sprintf('%s in %s on line %d', $errstr, $errfile, $errline), $errno));
return;
}
// 转换为异常抛出
throw new \Error(sprintf('%s in %s on line %d', $errstr, $errfile, $errline), $errno);
$this->exception(new \Error(sprintf('%s in %s on line %d', $errstr, $errfile, $errline), $errno));
}
}
public function shutdown(): void
{
$isFatal = function ($errno) {
return in_array($errno, [E_ERROR, E_CORE_ERROR, E_COMPILE_ERROR, E_PARSE]);
return in_array($errno, [E_ERROR, E_PARSE, E_CORE_ERROR, E_CORE_WARNING, E_COMPILE_ERROR, E_COMPILE_WARNING]);
};
if (!is_null($error = error_get_last()) && $isFatal($error['type'])) {
// 委托给异常处理

View File

@ -2,7 +2,7 @@
<?php
ini_set('display_errors', 'on');
ini_set('display_startup_errors', 'on');
ini_set('error_reporting', E_ALL ^ (E_NOTICE | E_WARNING));
ini_set('error_reporting', E_ALL ^ E_NOTICE);
ini_set('memory_limit', '1G');
require __DIR__ . '/../vendor/autoload.php';

View File

@ -36,25 +36,14 @@ class Error
{
if (error_reporting() & $errno) {
// 委托给异常处理
$isFatalWarning = function ($errno, $errstr) {
if ($errno == E_WARNING && strpos($errstr, 'require') === 0) {
return true;
}
return false;
};
if ($isFatalWarning($errno, $errstr)) {
$this->exception(new \Error(sprintf('%s in %s on line %d', $errstr, $errfile, $errline), $errno));
return;
}
// 转换为异常抛出
throw new \Error(sprintf('%s in %s on line %d', $errstr, $errfile, $errline), $errno);
$this->exception(new \Error(sprintf('%s in %s on line %d', $errstr, $errfile, $errline), $errno));
}
}
public function shutdown(): void
{
$isFatal = function ($errno) {
return in_array($errno, [E_ERROR, E_CORE_ERROR, E_COMPILE_ERROR, E_PARSE]);
return in_array($errno, [E_ERROR, E_PARSE, E_CORE_ERROR, E_CORE_WARNING, E_COMPILE_ERROR, E_COMPILE_WARNING]);
};
if (!is_null($error = error_get_last()) && $isFatal($error['type'])) {
// 委托给异常处理