A growing log sits beside several .gz archives. That does not establish that logrotate worked today. Those archives could be old, and the application ...
“MySQL server has gone away” sounds like the database stopped entirely. Sometimes it did. Sometimes the application simply tried to reuse an expired c...
A website loads at home but hangs on a phone connection. Its A record looks correct and the server is running. One useful next check is the IPv6 path....
An API request normally finishes in a second, then intermittently fails with cURL error 28. Increasing the timeout is tempting. But a slow DNS lookup ...
The GitLab upgrade finished and the version number looks right. Has the vulnerability actually gone away? Alpine Linux's incident is a useful reminder...
Comments are useful until they merely restate the next line of code. PHPDoc is more valuable when it records a function's contract: what callers must ...
After moving to PHP 8, your logs may start showing Undefined array key warnings. Often the code assumes that every request contains a field that is ac...
include(): Failed to open stream, often followed by Failed opening required, does not necessarily mean the file was deleted. PHP may simply be resolvi...
Composer finishes installing dependencies, but the application reports Class "App\\Service\\MailSender" not found. The package may be present; the aut...
Changing PHP in a hosting panel takes seconds. Finding the overlooked failure can take much longer: the home page loads, but login breaks, uploads fai...
If a PHP upload form works with small files but returns an empty $_FILES for larger ones, separate two limits before changing application code. upload...
Cleaning a string often means calling several functions in sequence. Changing part of a URL can mean rebuilding it by hand. PHP 8.5 adds tools for exp...