Files
michaelschiemer/src/Framework/ExceptionHandling/ShutdownHandler.php

57 lines
1.2 KiB
PHP

<?php
declare(strict_types=1);
namespace App\Framework\ExceptionHandling;
use App\Framework\ErrorHandling\ErrorHandlerManager;
use App\Framework\ExceptionHandling\Strategy\StrictErrorPolicy;
use Error;
final readonly class ShutdownHandler
{
private const array FATAL_TYPES = [E_ERROR, E_PARSE, E_CORE_ERROR, E_COMPILE_ERROR, E_USER_ERROR];
public function handle(): void
{
$last = error_get_last();
if (!$last || !$this->isFatalError($last['type'])) {
return;
}
$this->cleanOutputBuffer();
$file = (string)($last['file'] ?? 'unknown');
$line = (int)($last['line'] ?? 0);
$error = new Error($last['message'] ?? 'Fatal error',0);
try {
$ehm = new ErrorKernel();
$ehm->handle($error, ['file' => $file, 'line' => $line]);
} catch (\Throwable) {
}
exit(255);
}
private function cleanOutputBuffer(): void
{
try {
while (ob_get_level() > 0) {
@ob_end_clean();
}
} catch (\Throwable) {
// ignore
}
}
private function isFatalError(?int $type = null): bool
{
return in_array($type ?? 0, self::FATAL_TYPES, true);
}
}