ZeroFatal – PHP Fatal Error Monitor & Crash Detection

Описание

Your uptime monitor tells you when the whole site is down. It says nothing when a plugin conflict breaks only your checkout page, your contact form, or your admin dashboard — while the homepage still returns a cheerful 200 OK. Most site owners find out about those failures when a customer complains.

ZeroFatal watches for the failures a status check misses. When PHP hits a fatal error, ZeroFatal records what happened, works out which plugin or theme is responsible, and emails you before anyone else notices.

What it does

  • Catches PHP fatal errors and uncaught exceptions, including the ones that cause the white screen of death and the «There has been a critical error on this website» message.
  • Names the culprit. Instead of a raw file path, you see WooCommerce or Twenty Twenty-Four. Tracking down a plugin conflict starts with knowing which plugin.
  • Tells you how to fix it. Every error gets a plain-English explanation of what went wrong, the most likely cause, and a list of steps ordered from safest to most invasive. No PHP knowledge assumed.
  • Groups repeated errors. The same crash firing two hundred times is one row with a counter, not two hundred rows.
  • Emails you calmly. Errors arriving close together are grouped into one message rather than several, and a repeated error is only mentioned once per window. Choose immediate, grouped or a once-a-day summary.
  • Shows a readable stack trace, one frame per line, with WordPress core frames dimmed and the likely cause highlighted.
  • Keeps its own error log inside your dashboard, with filters for fatal, minor, resolved and ignored errors.
  • Cleans up after itself on a daily schedule you control.

Built to stay out of the way

  • No external requests. Ever. ZeroFatal never contacts any server. Your error data stays in your database and nowhere else. There is no telemetry, no phone-home, no account to create.
  • No measurable slowdown. On a normal page load the shutdown handler checks one value and stops. Nothing is written to the database unless an error actually happens.
  • It will not break your site. The capture code runs while your site may already be failing, so it guards every operation and fails silently rather than adding a second error on top of the first.
  • It does not fight WordPress. WordPress has its own fatal error handler and recovery mode. ZeroFatal observes and records; it never replaces or interferes with them.

Who it is for

Freelancers and agencies looking after client sites, and anyone who would rather hear about a site crash from their inbox than from a customer.

Скриншоты

Установка

  1. Upload the zerofatal folder to /wp-content/plugins/, or install the plugin through the Plugins screen in WordPress.
  2. Activate the plugin through the Plugins screen.
  3. Go to ZeroFatal Settings and confirm the notification email address.
  4. Press Send Test Error to run a harmless test through the whole pipeline and confirm that recording and email both work.

That is the whole setup. There is no account to create and nothing to connect.

Часто задаваемые вопросы

How can the plugin report an error when the site is already broken?

ZeroFatal registers a PHP shutdown function. PHP runs shutdown functions at the very end of every request, including requests that ended in a fatal error and returned a 500 response. So even when WordPress never finished loading and the visitor saw a white screen, ZeroFatal still gets one last chance to look at what went wrong, record it, and send the email.

Does this slow my site down?

No. On a request where nothing goes wrong, the shutdown handler reads one value, sees that there is no fatal error, and returns. It performs no database queries and loads no extra assets on the front end.

Does it send my error data anywhere?

No. Version 1.0 makes zero external HTTP requests of any kind. Everything is stored in a table in your own database, and the only thing that leaves your server is the notification email you configured.

Will it conflict with the WordPress critical error screen or recovery mode?

No. WordPress 5.2 and later ship their own fatal error handler and recovery mode. ZeroFatal is an observer: it records what happened and leaves core’s handling completely untouched.

Can it catch errors in a plugin that loads before ZeroFatal?

At runtime, yes — any fatal error during the request is caught, whichever plugin caused it. The one gap is a fatal error that happens while an earlier-loading plugin’s files are still being included, before ZeroFatal itself has loaded. Plugins load alphabetically, so ZeroFatal catches everything from zerofatal onwards at load time, plus everything from every plugin at runtime.

Why is the default view «Fatal» rather than «All»?

Because a list flooded with deprecation notices hides the one error that actually took your site down. Fatal errors are shown first by design. The other views are one click away.

What happens to my recorded errors if I deactivate the plugin?

Nothing. They stay in the database and are still there when you reactivate. Deactivating only stops the scheduled events.

Deleting is different: it removes the table, the settings, the transients and the scheduled events, leaving nothing behind. That is deliberate — a plugin you have deleted should not keep occupying your database.

I deleted the plugin, reinstalled it, and my old errors are gone. Why?

Because deleting a plugin in WordPress runs its uninstall routine, and ZeroFatal’s drops the error table. A reinstall then creates a fresh empty one. There is no way to recover the old rows afterwards.

If you only want to switch the plugin off for a while, use Deactivate rather than Delete — that keeps everything.

If you are migrating a site, reinstalling, or troubleshooting and you want the history to survive a delete, tick Keep my recorded errors and settings under Storage on the settings page before you delete. Your error history and configuration will then still be there when you install it again. It is off by default, because most people deleting a plugin expect it to clean up after itself.

Where does the «How to fix this» advice come from? Is it AI?

No. It comes from a library of rules written into the plugin and shipped with it. ZeroFatal matches your error against that library on your own server and shows you the entry that fits.

Nothing is sent anywhere to produce it. Your error messages, file paths and site details never leave your server, and the advice works exactly the same with your site offline. There is no AI involved and no service to sign up for.

The trade-off is honest: a fixed library cannot recognise every possible error. Roughly two thirds to three quarters of real-world fatal errors match a specific rule. Anything that does not still gets the general guidance for tracking down a plugin conflict, which is the method an experienced developer would use anyway.

The advice says to deactivate a plugin. Is that safe?

Steps are always ordered safest first, and nothing that changes how your site behaves appears without a warning telling you to take a backup and to test on a staging copy if the site is live.

ZeroFatal never makes any of these changes for you. There is no «fix it for me» button, and there never will be — the plugin diagnoses, you decide. It will also never tell you to edit a WordPress core file, and never suggests hiding an error rather than fixing it.

I get several ZeroFatal emails at once. Can that be calmed down?

Yes — the default already does. Set When to send on the settings page.

Why this needs handling at all: a throttle alone limits how often one error can email you, but three different errors each carry their own throttle. Because they usually start at the same moment, their timers would also expire at the same moment — landing two or three emails in the same minute.

Grouped, the default, fixes that. A fatal error that takes your site down still emails you the instant it happens, because a site that is down cannot be relied on to run a scheduled task. Everything after it, and every warning or notice, waits a few minutes and arrives as a single email listing them all. Once a day is quieter still, at the cost of possibly not hearing about a crash until the next day. Immediately restores the old one-email-per-error behaviour.

What is the difference between the grouping window and the throttle?

They answer different questions, which is why both exist.

The grouping window (default five minutes) is how long ZeroFatal waits, collecting different errors, before sending one email about all of them. It controls how many emails you get.

The throttle (default sixty minutes) is how long before the same error may be mentioned again. It stops one crash in a loop from filling every email. The occurrence counter keeps rising in the background either way, so nothing is lost.

ZeroFatal’s emails go straight to my spam folder. How do I fix that?

This is a mail authentication problem rather than a ZeroFatal one, and the same fix improves every other email your site sends.

By default WordPress hands mail to PHP’s mail() function, which sends nothing that proves the message really came from your domain. Gmail, Outlook and the rest treat unverified mail with suspicion, and a default sender address of wordpress@yourdomain.com — a mailbox that usually does not exist — makes it worse.

Three things fix it, in order of how much they matter:

  1. Route your site’s mail through an SMTP service. Install any SMTP plugin from the plugin directory and connect it to a real sending service. It takes over wp_mail() for the whole site, so ZeroFatal needs no configuration for it.
  2. Set the sender to an address that actually exists on your domain, rather than the WordPress default.
  3. Add SPF and DKIM records to your DNS. Your sending service gives you the exact values. Without them, nothing else reliably keeps mail out of spam.

To check your progress, put a mail-tester.com address in the notification email field and press Send Test Error. It scores the message and names whatever is still missing. The full checklist is on the settings page, under the Send Test Error button.

I pressed Send Test Error but no email arrived. What is wrong?

Almost always this is your site’s mail setup rather than ZeroFatal. The plugin hands the message to WordPress with wp_mail() and its job ends there — it does not contain a mail server and does not use any third-party sending service.

By default wp_mail() falls back to PHP’s mail() function, which needs a working mail server on the machine. On a local development site (WAMP, XAMPP, Laragon, MAMP) there usually is not one, so nothing is ever sent. On live hosting it often does send, but without SPF and DKIM records set up for your domain, providers such as Gmail and Outlook frequently drop the message or file it as spam.

The fix is the same one used for every other WordPress email, from order receipts to password resets: install an SMTP plugin from the plugin directory and point it at a real sending service. ZeroFatal needs no configuration for this — the SMTP plugin takes over wp_mail() and ZeroFatal’s emails start going out with everything else. If you are testing locally, a mail-catcher tool such as Mailpit or MailHog will show you the message without sending it anywhere.

Also worth checking: that Email notifications is ticked on the settings page, and that the notification address is one you can actually read.

An error is showing in my list, but I never got an email about it.

That is usually one of four things, all of them deliberate:

  1. The throttle. After the first email about a particular error, ZeroFatal stays quiet about that same error for the length of your notification throttle, one hour by default. The occurrence counter keeps rising in the background. A different error still emails you straight away.
  2. The source is muted. If the responsible plugin is ticked under Never email about, its errors are recorded and listed but never emailed.
  3. The error is not fatal. Warnings and notices are not emailed unless you enable those levels yourself.
  4. The crash happened too early. wp_mail() is loaded partway through WordPress startup. A fatal error that strikes before that point is still captured and stored — you will see it in the list — but there is no mail function available yet to send it with. Recording it and staying quiet is safer than trying to send from a half-loaded site and causing a second crash.

Can I stop being emailed about one noisy plugin?

Yes. On the settings page, tick that plugin under Never email about. Its errors are still recorded and listed, they just stop arriving in your inbox.

Отзывы

Нет отзывов об этом плагине.

Участники и разработчики

«ZeroFatal – PHP Fatal Error Monitor & Crash Detection» — проект с открытым исходным кодом. В развитие плагина внесли свой вклад следующие участники:

Участники

Журнал изменений

1.0.0

  • Initial release.
  • Captures PHP fatal errors and uncaught exceptions through a PHP shutdown handler, so a crash is recorded even when WordPress never finished loading.
  • Optional capture of warnings and notices, off by default and capped at ten per request.
  • Attributes every error to the responsible plugin, theme, must-use plugin or WordPress core, with its display name and the version it crashed on.
  • Deduplicates by fingerprint: the same crash firing repeatedly is one row with a counter, not hundreds of rows.
  • «How to fix this» panel on every error — what it means in plain English, the most likely cause, and steps ordered from safest to most invasive.
  • Twelve diagnosis rules covering syntax errors, duplicate code, missing functions and classes, PHP 8 type errors, memory and timeout limits, missing files, division by zero and database failures. Anything unmatched gets general conflict-isolation guidance rather than an empty panel.
  • All diagnosis is computed locally from the shipped rule library. No AI, no external requests, no data leaves your server.
  • «Copy diagnostic report» button, putting the message, file, line, stack trace and environment on your clipboard ready to send to a plugin author.
  • Error list with fatal, minor, resolved and ignored views, plus row and bulk actions.
  • Error detail screen with summary cards, the full message and a frame-by-frame stack trace, core frames dimmed and the likely culprit marked.
  • Three email delivery modes — immediate, grouped and a once-a-day summary. Grouped is the default: a fatal error still alerts you at once, while everything after it arrives as a single message.
  • Per-error throttle and a per-plugin mute list, so one noisy source cannot flood your inbox.
  • Notification emails carry Reply-To, Auto-Submitted and X-Auto-Response-Suppress headers, so a forwarded alert can be replied to and no autoresponder answers it.
  • Delivery checklist on the settings page for when email lands in spam — SMTP, sender address, SPF and DKIM.
  • Send Test Error tool that runs the whole pipeline without breaking the page.
  • Daily cleanup with configurable retention and a maximum row count, which never removes an open fatal error seen in the last 24 hours.
  • Deleting the plugin removes everything it stored, unless you tick the optional setting that keeps your error history and settings for a reinstall.