Clearing PHP's OPcache with CacheTool
OPcache is great, it improves PHP performance by storing precompiled script bytecode in shared memory, thereby removing the need for PHP to load and parse scripts on each request.
But it seems like sometimes OPcache is not refreshing updated files in its cache, or that it cached a broken version of the compiled.php
file because a user visited the website while Laravel was generating it.
To fix this issue, I'm now using CachTool to clear the OPcache on every deploy automatically.
First download the cachetool.phar file or install it globally using composer:
composer global require gordalina/cachetool
By default, CacheTool will try to connect to FastCGI on port 9000. So if your PHP installation is not using a socket, you can just run:
cachetool opcache:reset
But in case you are using sockets (most likely), you need to pass the socket location to the command:
cachetool opcache:reset --fcgi=/var/run/php5-fpm.sock
And to make sure the OPcache is cleared after each deploy, add the command to your composer post install/update scripts. This way, every time you install your dependencies, OPcache is forced to refresh its cache:
"post-install-cmd": [
// ...
"cachetool opcache:reset --fcgi=/var/run/php5-fpm.sock"
]