PHP still runs old code after deploy (OPcache not reset)
OPcache keeps serving cached bytecode, so changes uploaded to the server don’t take effect.
Seen on:
PHP
Meaning
With opcache.validate_timestamps=0 (common in production) PHP never checks files again until FPM restarts or the cache is reset. Symlink-swap deployments also confuse realpath caches.
Common causes
- validate_timestamps disabled
- Deploy without reloading PHP-FPM
- Symlink-based deploys with realpath cache
⚡ Quick fix
- Reload PHP-FPM after each deploy (
systemctl reload php8.2-fpm) - Call
opcache_reset()via a protected endpoint - Use
$realpath_rootin Nginx for symlink deploys
Detailed fix by platform
Nginx
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
How to diagnose
- Setting — opcache.validate_timestamps value
- Deploy — Is FPM reloaded?
🧠 Still stuck? Analyze your error
Paste the full message, response headers or stack trace — we'll detect the platform and point to the most likely cause.
Was this page helpful?
Report a correction or suggest an improvement
Last updated 2 Oct 2026