Mae PHP yn dal gwallau lefel FATAL

Cyfeirnod swyddogol

Gwefan swyddogol set_error_handler register_shutdown_function

Sut i ddal pob gwall yn berffaith

gellir defnyddio set_error_handler i ddal y mwyafrif o fathau o wallau. Pan ddaw gwall lefel FATAL ar draws, oherwydd bod PHP yn terfynu'r llawdriniaeth yn uniongyrchol, ni ellir sbarduno'r swyddogaeth galw yn ôl a osodwyd gan set_error_handler. Ar yr adeg hon, mae angen i ni ddefnyddio register_shutdown_function i osod y swyddogaeth galw yn ôl ar gyfer terfynu rhaglenni. Dylid nodi bod yr alwad yn ôl a osodwyd gan register_shutdown_function yn cael ei gweithredu ar ôl i'r rhaglen gael ei therfynu, ni waeth a oes gwall yn y broses. Felly yn yr alwad hon yn ôl, mae angen i ni hefyd benderfynu a oes gwall wedi digwydd, ac a oes gwall wedi digwydd, byddwn yn ei gofnodi yn y log. Am fanylion, cyfeiriwch at y cod canlynol.

            set_error_handler('exception_handler');
register_shutdown_function('shutdown_handler');
function exception_handler($err_no, $err_str, $err_file, $err_line)
{
    error_reporting(0);
    // save error log
    // ...
    error_reporting(E_ALL);
}
function shutdown_handler()
{
    $error = error_get_last();
    if (empty($error)) {
        return;
    }
    error_reporting(0);
    // save error log
    // ...
    error_reporting(E_ALL);
}