Skip to content
Oh Dear

The last 24 hours in PHP land, as observed by a monitoring service

Published on October 22, 2026 by Mattias Geniar

The last 24 hours have been interesting in PHP land, to say the least. What started as a responsible disclosure of 2 highly critical vulnerabilities discovered in PHP core turned into a race to find & exploit the vulnerabilities before the official patches were released.

As a precaution, many PHP site owners decided to take down their applications until the official patches were out. All to protect their servers & customer data from being exploited.

Now that all the patches are available and (hopefully!) most people have patched their systems, applications are coming back online.

Below is a series of graphs of what we observed on the websites we monitor for our clients. Given our background in the PHP community, it's no surprise a majority of the sites we monitor end up being written in PHP.

Sites going down #

It's our job to alert when sites go down, but we haven't seen this many go down at the same time. Below are our baseline numbers compared to the last 48 hours, where at the peak, 18.8% of the sites we monitored were offline.

Share of sites that were downPercent of monitored sites that failed at least half of their checks in each half hour. Times are in UTC.
Time (UTC)These 48 hoursSame hours, a week earlier
Tue 20 Oct 09:001.1%0.9%
Tue 20 Oct 09:301.1%0.9%
Tue 20 Oct 10:001.1%0.9%
Tue 20 Oct 10:301.1%0.9%
Tue 20 Oct 11:001.1%0.9%
Tue 20 Oct 11:301%0.9%
Tue 20 Oct 12:000.9%0.9%
Tue 20 Oct 12:300.9%0.9%
Tue 20 Oct 13:000.9%0.9%
Tue 20 Oct 13:300.9%0.9%
Tue 20 Oct 14:000.9%0.9%
Tue 20 Oct 14:300.9%0.9%
Tue 20 Oct 15:000.9%0.9%
Tue 20 Oct 15:300.9%0.9%
Tue 20 Oct 16:000.9%0.9%
Tue 20 Oct 16:300.9%0.9%
Tue 20 Oct 17:000.9%0.9%
Tue 20 Oct 17:300.9%0.9%
Tue 20 Oct 18:001%0.9%
Tue 20 Oct 18:301%0.9%
Tue 20 Oct 19:000.9%0.9%
Tue 20 Oct 19:300.9%0.9%
Tue 20 Oct 20:001%0.9%
Tue 20 Oct 20:301%0.9%
Tue 20 Oct 21:000.9%0.9%
Tue 20 Oct 21:301%0.9%
Tue 20 Oct 22:001%0.9%
Tue 20 Oct 22:301%0.9%
Tue 20 Oct 23:001%0.9%
Tue 20 Oct 23:301%0.9%
Wed 21 Oct 00:001%0.9%
Wed 21 Oct 00:301%0.9%
Wed 21 Oct 01:001%0.9%
Wed 21 Oct 01:301%0.9%
Wed 21 Oct 02:001%0.9%
Wed 21 Oct 02:301%0.9%
Wed 21 Oct 03:001%0.9%
Wed 21 Oct 03:301%0.9%
Wed 21 Oct 04:001%0.9%
Wed 21 Oct 04:301%0.9%
Wed 21 Oct 05:001%1%
Wed 21 Oct 05:301.4%0.9%
Wed 21 Oct 06:001.6%0.9%
Wed 21 Oct 06:301.6%0.9%
Wed 21 Oct 07:001.8%0.9%
Wed 21 Oct 07:301.9%0.8%
Wed 21 Oct 08:002.1%0.9%
Wed 21 Oct 08:302.3%0.9%
Wed 21 Oct 09:002.6%0.9%
Wed 21 Oct 09:303.2%0.9%
Wed 21 Oct 10:003.9%0.9%
Wed 21 Oct 10:305%0.9%
Wed 21 Oct 11:006.8%0.9%
Wed 21 Oct 11:309%0.9%
Wed 21 Oct 12:0011.1%0.9%
Wed 21 Oct 12:3013.2%0.9%
Wed 21 Oct 13:0014.6%0.9%
Wed 21 Oct 13:3016.9%0.9%
Wed 21 Oct 14:0018.5%0.9%
Wed 21 Oct 14:3018.8%0.9%
Wed 21 Oct 15:0017.6%0.9%
Wed 21 Oct 15:3017.1%0.9%
Wed 21 Oct 16:0015.8%0.9%
Wed 21 Oct 16:3015.2%0.9%
Wed 21 Oct 17:0014.2%0.9%
Wed 21 Oct 17:3013.4%0.9%
Wed 21 Oct 18:0012.6%0.9%
Wed 21 Oct 18:3011.6%0.9%
Wed 21 Oct 19:0010.3%0.9%
Wed 21 Oct 19:308.9%0.9%
Wed 21 Oct 20:008%0.9%
Wed 21 Oct 20:307%0.9%
Wed 21 Oct 21:006.7%0.9%
Wed 21 Oct 21:306.4%0.9%
Wed 21 Oct 22:005.9%0.9%
Wed 21 Oct 22:305.7%0.9%
Wed 21 Oct 23:005.6%0.9%
Wed 21 Oct 23:305.4%0.9%
Thu 22 Oct 00:005.2%0.9%
Thu 22 Oct 00:305.1%0.9%
Thu 22 Oct 01:005%0.9%
Thu 22 Oct 01:305%0.9%
Thu 22 Oct 02:004.9%0.9%
Thu 22 Oct 02:304.9%0.9%
Thu 22 Oct 03:004.9%0.9%
Thu 22 Oct 03:305%1%
Thu 22 Oct 04:004.9%1%
Thu 22 Oct 04:304.7%1.2%
Thu 22 Oct 05:004.7%1.4%
Thu 22 Oct 05:304.5%1.3%
Thu 22 Oct 06:004.3%1%
Thu 22 Oct 06:304.2%1%
Thu 22 Oct 07:004%0.9%
Thu 22 Oct 07:303.8%0.9%
Thu 22 Oct 08:003.6%0.9%
Thu 22 Oct 08:303.5%0.9%

Of course, it's our job to alert/notify the ones responsible for those sites, so we sent out alerts. A lot of them. At the peak, 25x more sites got a down alert than in a normal half hour.

Sites we sent a "down" alert forSites with at least one "site is down" alert delivered, per half hour, compared to a normal half hour. 1× is normal. Times are in UTC.
Time (UTC)These 48 hoursSame hours, a week earlier
Tue 20 Oct 09:001.4×1×
Tue 20 Oct 09:301.2×0.8×
Tue 20 Oct 10:001.3×1×
Tue 20 Oct 10:301.2×0.9×
Tue 20 Oct 11:001.3×1.1×
Tue 20 Oct 11:300.9×0.9×
Tue 20 Oct 12:000.9×1.1×
Tue 20 Oct 12:301×1.2×
Tue 20 Oct 13:000.9×1×
Tue 20 Oct 13:301.7×1.4×
Tue 20 Oct 14:001.1×1×
Tue 20 Oct 14:301×1×
Tue 20 Oct 15:000.8×1.1×
Tue 20 Oct 15:300.9×0.9×
Tue 20 Oct 16:000.7×0.9×
Tue 20 Oct 16:300.9×0.8×
Tue 20 Oct 17:000.8×1.1×
Tue 20 Oct 17:300.9×0.9×
Tue 20 Oct 18:001×1.1×
Tue 20 Oct 18:300.9×0.9×
Tue 20 Oct 19:001×0.9×
Tue 20 Oct 19:300.9×1×
Tue 20 Oct 20:000.8×0.8×
Tue 20 Oct 20:301.2×0.7×
Tue 20 Oct 21:000.8×0.9×
Tue 20 Oct 21:301.3×1×
Tue 20 Oct 22:001×1×
Tue 20 Oct 22:301.1×1.7×
Tue 20 Oct 23:000.8×0.9×
Tue 20 Oct 23:300.9×0.7×
Wed 21 Oct 00:001.2×1×
Wed 21 Oct 00:301.1×0.8×
Wed 21 Oct 01:000.8×0.9×
Wed 21 Oct 01:301.1×0.9×
Wed 21 Oct 02:000.9×1.1×
Wed 21 Oct 02:300.9×0.8×
Wed 21 Oct 03:000.9×1.1×
Wed 21 Oct 03:301×0.9×
Wed 21 Oct 04:000.8×1×
Wed 21 Oct 04:300.9×0.9×
Wed 21 Oct 05:001.4×1.2×
Wed 21 Oct 05:302.6×0.8×
Wed 21 Oct 06:001.2×1.1×
Wed 21 Oct 06:302.6×0.8×
Wed 21 Oct 07:001.5×1×
Wed 21 Oct 07:302.6×0.8×
Wed 21 Oct 08:001.7×0.9×
Wed 21 Oct 08:303.3×0.9×
Wed 21 Oct 09:002.7×1.1×
Wed 21 Oct 09:304.9×1.1×
Wed 21 Oct 10:004.8×1.2×
Wed 21 Oct 10:307.9×0.9×
Wed 21 Oct 11:009.6×0.9×
Wed 21 Oct 11:3011.7×1×
Wed 21 Oct 12:0015.7×1.1×
Wed 21 Oct 12:3017.2×1.2×
Wed 21 Oct 13:0021×0.8×
Wed 21 Oct 13:3023.4×1×
Wed 21 Oct 14:0025.2×1.1×
Wed 21 Oct 14:3022.6×1.2×
Wed 21 Oct 15:0023.3×1.3×
Wed 21 Oct 15:3019.2×0.8×
Wed 21 Oct 16:0021.7×0.9×
Wed 21 Oct 16:3017.4×0.8×
Wed 21 Oct 17:0019.4×0.9×
Wed 21 Oct 17:3015.2×0.8×
Wed 21 Oct 18:0017.3×1.2×
Wed 21 Oct 18:3012.3×0.9×
Wed 21 Oct 19:0013.6×0.9×
Wed 21 Oct 19:3010.1×0.8×
Wed 21 Oct 20:0011×1×
Wed 21 Oct 20:307.5×0.8×
Wed 21 Oct 21:008.3×1.1×
Wed 21 Oct 21:306.6×0.8×
Wed 21 Oct 22:007.8×1×
Wed 21 Oct 22:306.2×0.8×
Wed 21 Oct 23:007.3×0.9×
Wed 21 Oct 23:305.9×1.1×
Thu 22 Oct 00:006.8×1×
Thu 22 Oct 00:305.9×1×
Thu 22 Oct 01:006×1.1×
Thu 22 Oct 01:304×1.1×
Thu 22 Oct 02:004×1×
Thu 22 Oct 02:303.9×0.9×
Thu 22 Oct 03:004.3×1×
Thu 22 Oct 03:304.2×0.9×
Thu 22 Oct 04:004.2×1.4×
Thu 22 Oct 04:304×1.6×
Thu 22 Oct 05:003.9×1.5×
Thu 22 Oct 05:303.8×1.5×
Thu 22 Oct 06:003.8×1.1×
Thu 22 Oct 06:303.7×0.9×
Thu 22 Oct 07:003.6×1.1×
Thu 22 Oct 07:303.3×0.8×
Thu 22 Oct 08:003.6×1.5×
Thu 22 Oct 08:303×0.9×

Counts sites, not messages. "Normal" is the average half hour of the week before.

And what goes down must come up. While we repeat notifications for downtime as the issue persists, every downtime alert is also followed by a recovery alert.

How they went down #

Looking at the status codes, it's interesting to see how most sites were brought offline. It's a mix of HTTP/503 responses and sites that were completely unresponsive.

So either sysadmins took php-fpm down but let Nginx/Apache still serve requests, or they took the entire web server offline instead.

We did something similar: for a brief period, the Oh Dear website & dashboard were unavailable, as we set up a static HTML page served by Nginx, while keeping our php-fpm stopped.

How the down sites answeredPercent of all monitored sites that were down, by the answer they gave most often. 503 is the code most maintenance modes return, but not every 503 is maintenance. Times are in UTC.
Time (UTC)503 Service UnavailableNo answer at all401 or 403, blockedGateway or proxy errorOther
Tue 20 Oct 09:00<0.1%0.6%0.2%<0.1%0.2%
Tue 20 Oct 09:30<0.1%0.6%0.2%<0.1%0.2%
Tue 20 Oct 10:00<0.1%0.6%0.2%<0.1%0.2%
Tue 20 Oct 10:30<0.1%0.6%0.2%<0.1%0.2%
Tue 20 Oct 11:00<0.1%0.5%0.2%<0.1%0.2%
Tue 20 Oct 11:30<0.1%0.5%0.2%<0.1%0.2%
Tue 20 Oct 12:00<0.1%0.4%0.2%<0.1%0.2%
Tue 20 Oct 12:30<0.1%0.4%0.2%<0.1%0.2%
Tue 20 Oct 13:00<0.1%0.4%0.2%<0.1%0.2%
Tue 20 Oct 13:30<0.1%0.4%0.2%<0.1%0.2%
Tue 20 Oct 14:00<0.1%0.4%0.2%<0.1%0.2%
Tue 20 Oct 14:30<0.1%0.4%0.2%<0.1%0.2%
Tue 20 Oct 15:00<0.1%0.4%0.2%<0.1%0.2%
Tue 20 Oct 15:30<0.1%0.4%0.2%<0.1%0.2%
Tue 20 Oct 16:00<0.1%0.4%0.2%<0.1%0.2%
Tue 20 Oct 16:30<0.1%0.4%0.2%<0.1%0.2%
Tue 20 Oct 17:00<0.1%0.4%0.2%<0.1%0.2%
Tue 20 Oct 17:30<0.1%0.4%0.2%<0.1%0.2%
Tue 20 Oct 18:00<0.1%0.4%0.2%<0.1%0.2%
Tue 20 Oct 18:30<0.1%0.5%0.2%<0.1%0.2%
Tue 20 Oct 19:00<0.1%0.4%0.2%<0.1%0.2%
Tue 20 Oct 19:30<0.1%0.4%0.2%<0.1%0.2%
Tue 20 Oct 20:00<0.1%0.4%0.2%<0.1%0.2%
Tue 20 Oct 20:30<0.1%0.4%0.2%<0.1%0.2%
Tue 20 Oct 21:00<0.1%0.4%0.2%<0.1%0.2%
Tue 20 Oct 21:30<0.1%0.4%0.2%<0.1%0.2%
Tue 20 Oct 22:00<0.1%0.5%0.2%<0.1%0.2%
Tue 20 Oct 22:30<0.1%0.5%0.2%<0.1%0.2%
Tue 20 Oct 23:00<0.1%0.5%0.2%<0.1%0.2%
Tue 20 Oct 23:30<0.1%0.4%0.2%<0.1%0.2%
Wed 21 Oct 00:00<0.1%0.4%0.2%<0.1%0.2%
Wed 21 Oct 00:30<0.1%0.4%0.2%<0.1%0.2%
Wed 21 Oct 01:00<0.1%0.4%0.2%<0.1%0.2%
Wed 21 Oct 01:30<0.1%0.5%0.2%<0.1%0.2%
Wed 21 Oct 02:00<0.1%0.4%0.2%<0.1%0.2%
Wed 21 Oct 02:30<0.1%0.4%0.2%<0.1%0.2%
Wed 21 Oct 03:00<0.1%0.4%0.2%<0.1%0.2%
Wed 21 Oct 03:30<0.1%0.4%0.2%<0.1%0.2%
Wed 21 Oct 04:00<0.1%0.5%0.2%<0.1%0.2%
Wed 21 Oct 04:30<0.1%0.4%0.2%<0.1%0.2%
Wed 21 Oct 05:00<0.1%0.5%0.2%<0.1%0.2%
Wed 21 Oct 05:30<0.1%0.8%0.2%0.1%0.2%
Wed 21 Oct 06:00<0.1%1%0.2%0.1%0.2%
Wed 21 Oct 06:30<0.1%1%0.2%0.1%0.2%
Wed 21 Oct 07:000.1%1.1%0.2%0.1%0.2%
Wed 21 Oct 07:300.2%1.1%0.2%0.2%0.2%
Wed 21 Oct 08:000.3%1.1%0.2%0.2%0.3%
Wed 21 Oct 08:300.4%1.2%0.3%0.2%0.3%
Wed 21 Oct 09:000.4%1.3%0.3%0.2%0.3%
Wed 21 Oct 09:300.6%1.7%0.3%0.2%0.4%
Wed 21 Oct 10:001%1.8%0.3%0.3%0.4%
Wed 21 Oct 10:301.5%2.2%0.4%0.3%0.6%
Wed 21 Oct 11:001.9%3.1%0.8%0.3%0.7%
Wed 21 Oct 11:302.9%4%0.8%0.4%0.8%
Wed 21 Oct 12:004%4.5%1.2%0.5%0.9%
Wed 21 Oct 12:305.5%4.9%1.3%0.6%1%
Wed 21 Oct 13:006.2%5.2%1.3%0.7%1.2%
Wed 21 Oct 13:307.4%6.2%1.3%0.8%1.3%
Wed 21 Oct 14:008.2%6.5%1.4%0.9%1.5%
Wed 21 Oct 14:308.1%6.9%1.6%0.9%1.3%
Wed 21 Oct 15:007.4%6.7%1.5%0.8%1.2%
Wed 21 Oct 15:307.1%6.7%1.4%0.7%1.2%
Wed 21 Oct 16:006.1%6.6%1.3%0.6%1.1%
Wed 21 Oct 16:305.6%6.5%1.2%0.7%1.1%
Wed 21 Oct 17:005.3%6%1.2%0.7%1.1%
Wed 21 Oct 17:304.9%5.7%1.1%0.7%1%
Wed 21 Oct 18:004.4%5.5%1%0.7%1%
Wed 21 Oct 18:303.9%5.2%0.9%0.7%0.9%
Wed 21 Oct 19:003.3%4.7%0.9%0.6%0.7%
Wed 21 Oct 19:302.8%4.3%0.7%0.6%0.6%
Wed 21 Oct 20:002.3%3.9%0.7%0.5%0.5%
Wed 21 Oct 20:302.1%3.2%0.7%0.5%0.5%
Wed 21 Oct 21:002%3%0.7%0.5%0.5%
Wed 21 Oct 21:301.9%2.9%0.7%0.4%0.5%
Wed 21 Oct 22:001.5%2.9%0.6%0.5%0.5%
Wed 21 Oct 22:301.4%2.7%0.6%0.4%0.5%
Wed 21 Oct 23:001.4%2.7%0.6%0.4%0.5%
Wed 21 Oct 23:301.4%2.7%0.6%0.3%0.5%
Thu 22 Oct 00:001.3%2.5%0.6%0.3%0.4%
Thu 22 Oct 00:301.3%2.5%0.6%0.3%0.4%
Thu 22 Oct 01:001.3%2.5%0.6%0.3%0.4%
Thu 22 Oct 01:301.3%2.5%0.6%0.3%0.4%
Thu 22 Oct 02:001.3%2.4%0.6%0.3%0.4%
Thu 22 Oct 02:301.3%2.4%0.6%0.3%0.4%
Thu 22 Oct 03:001.3%2.3%0.6%0.3%0.4%
Thu 22 Oct 03:301.4%2.3%0.6%0.3%0.4%
Thu 22 Oct 04:001.4%2.3%0.5%0.3%0.4%
Thu 22 Oct 04:301.4%2.2%0.5%0.3%0.4%
Thu 22 Oct 05:001.3%2.2%0.5%0.3%0.4%
Thu 22 Oct 05:301.2%2.1%0.5%0.3%0.4%
Thu 22 Oct 06:001.2%2%0.5%0.2%0.4%
Thu 22 Oct 06:301.1%2%0.5%0.2%0.4%
Thu 22 Oct 07:001%1.9%0.5%0.2%0.4%
Thu 22 Oct 07:300.9%1.8%0.5%0.3%0.4%
Thu 22 Oct 08:000.8%1.7%0.4%0.3%0.4%
Thu 22 Oct 08:300.8%1.7%0.4%0.2%0.4%

Of the sites that were down, 7.7% answered 503 before the rise. At the peak it was 43.4%.

Some sites were quick to jump into action and took their sites down for several hours. Others were more relaxed and only took their sites offline a few hours before the patches were due to be released.

How long the outages lastedShare of all monitored sites that had an outage of this length. A week earlier, outages of 1 hour or longer were rare.
These 48 hoursSame hours, a week earlier
5 to 15 min4.2%2.6%
15 to 60 min2.9%1%
1 to 4 hours6.4%0.6%
4 to 12 hours11%0.1%
12 hours or more2.1%<0.1%
Still down2.7%0.2%

Outages under 5 minutes are left out: 30.4% of sites had one, against 24.1% the week before. A site with several outages counts once in each length it had. "Still down" means still down when the 48 hours ended, on 22 October at 09:00 UTC. The week before is judged the same way.

What we sent #

It'll be no surprise that most of the notifications we sent were in the "Your site is down" category. Downtime is anything that isn't an HTTP/2xx code (or that fails the optional checkstring or header verification), so any HTTP/503 or timeout will trigger these notifications.

Which alerts grewAlerts delivered in these 48 hours, compared to the same 48 hours a week earlier.
Compared to the week before
Site is down5.1×
Could not read health results4.3×
Site is back up2.7×
Cron job failed2.1×
DNS problem found1.4×
DNS records changed1.3×
Certificate changed1.1×

Counts delivered messages. One outage that alerts three channels counts three times.

Who answered with a 503 #

The Server header also tells us who answered with the 503. Most often - again, no surprise - this was Cloudflare. They were also quick to add a WAF rule for all clients, mitigating the attack for those that didn't take their sites offline preventively.

Who served the 503 pageOutages that started with a 503, by the web server that answered.
Share of the 503 outages
Cloudflare28.9%
nginx24.3%
No Server header24%
Apache10.9%
AWS load balancer4.1%
LiteSpeed1.2%
Other6.5%

Read from the Server header of the failed check closest to the start of the outage. It names the server or CDN that answered, not the application behind it.

Suffice it to say, the past 24 hours were a rush. While the peak seems to be behind us, many sites are still down as they await patches, and we haven't seen a return to baseline yet. We'll keep updating this blog post over the next few days to show the final results in these graphs.

Start using Oh Dear today!

  • Access to all features
  • Cancel anytime
  • No credit card required
  • First 10 days free

More updates

Want to get started? We offer a no-strings-attached 10 day trial. No credit card required.

You're all set in less than a minute!