How to clear APC cache entries? How to clear APC cache entries? php php

How to clear APC cache entries?


You can use the PHP function apc_clear_cache.

Calling apc_clear_cache() will clear the system cache and calling apc_clear_cache('user') will clear the user cache.


I don't believe any of these answers actually work for clearing the APC cache from the command line. As Frank Farmer commented above, the CLI runs in a process separate from Apache.

My solution for clearing from the command line was to write a script that copies an APC clearing script to the web directory and accesses it and then deletes it. The script is restricted to being accessed from the localhost.

  1. apc_clear.php

    This is the file that the script copies to the web directory, accesses, and deletes.

    <?phpif (in_array(@$_SERVER['REMOTE_ADDR'], array('127.0.0.1', '::1'))){  apc_clear_cache();  apc_clear_cache('user');  apc_clear_cache('opcode');  echo json_encode(array('success' => true));}else{  die('SUPER TOP SECRET');}
  2. Cache clearing script

    This script copies apc_clear.php to the web directory, accesses it, then deletes it. This is based off of a Symfony task. In the Symfony version, calls are made to the Symfony form of copy and unlink, which handle errors. You may want to add checks that they succeed.

    copy($apcPaths['data'], $apcPaths['web']); //'data' is a non web accessable directory$url = 'http://localhost/apc_clear.php'; //use domain name as necessary$result = json_decode(file_get_contents($url));if (isset($result['success']) && $result['success']){  //handle success}else{  //handle failure}unlink($apcPaths['web']);


I know it's not for everyone but: why not to do a graceful Apache restart?

For e.g. in case of Centos/RedHat Linux:

sudo service httpd graceful

Ubuntu:

sudo service apache2 graceful