Performance Symfony book提到當某些類已經移動並且確實需要時,需要刷新APC緩存。如何刷新APC類加載器緩存?
但是,我沒有找到如何清除自動加載器的APC緩存。我嘗試使用PHP apc_clear_cache()
函數,但它沒有幫助。
如何清除此APC緩存?
Performance Symfony book提到當某些類已經移動並且確實需要時,需要刷新APC緩存。如何刷新APC類加載器緩存?
但是,我沒有找到如何清除自動加載器的APC緩存。我嘗試使用PHP apc_clear_cache()
函數,但它沒有幫助。
如何清除此APC緩存?
正如毛羅提到apc_clear_cache也可以採取一個參數來清除不同類型的APC緩存:
apc_clear_cache();
apc_clear_cache('user');
apc_clear_cache('opcode');
另外還有ApcBundle,它增加了一個Symfony apc:clear命令。
謝謝,這正是我正在尋找的。 – 2013-05-14 09:36:05
有關信息,上述行必須在Symfony2應用程序中執行。在'app.php'中臨時添加它們是有用的。 – 2013-07-04 15:19:11
只需創建一個簡單的控制器ApcController如下
<?php
namespace Rm\DemoBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use JMS\SecurityExtraBundle\Annotation\Secure;
/**
* apc cache clear controller
*/
class ApcController extends Controller
{
/**
* clear action
*
* @Route("/cc", name="rm_demo_apc_cache_clear")
*
* @Secure(roles="ROLE_SUPER_ADMIN, ROLE_ADMIN")
*
* @param \Symfony\Component\HttpFoundation\Request $request
*/
public function cacheClearAction(Request $request)
{
$message = "";
if (function_exists('apc_clear_cache')
&& version_compare(PHP_VERSION, '5.5.0', '>=')
&& apc_clear_cache()) {
$message .= ' User Cache: success';
} elseif (function_exists('apc_clear_cache')
&& version_compare(PHP_VERSION, '5.5.0', '<')
&& apc_clear_cache('user')) {
$message .= ' User Cache: success';
} else {
$success = false;
$message .= ' User Cache: failure';
}
if (function_exists('opcache_reset') && opcache_reset()) {
$message .= ' Opcode Cache: success';
} elseif (function_exists('apc_clear_cache')
&& version_compare(PHP_VERSION, '5.5.0', '<')
&& apc_clear_cache('opcode')) {
$message .= ' Opcode Cache: success';
} else {
$success = false;
$message .= ' Opcode Cache: failure';
}
$this->get('session')->getFlashBag()
->add('success', $message);
// redirect
$url = $this->container
->get('router')
->generate('sonata_admin_dashboard');
return $this->redirect($url);
}
}
然後導入控制器路由到您的的routing.yml
#src/Rm/DemoBundle/Resources/config/routing.yml
apc:
resource: "@RmDemoBundle/Controller/ApcController.php"
type: annotation
prefix: /apc
現在,您可以通過以下網址清除緩存APC:
http://yourdomain/apc/cc
注意:@Secure(roles =「ROLE_SUPER_AD MIN,ROLE_ADMIN「)註釋,這將保護您apc緩存url免受未經授權的訪問。
apc_clear_cache()必須正常工作。你已經檢查你的問題是不是與symfony緩存? –
Mauro
2013-02-15 12:17:12
謝謝,我會再次嘗試'apc_clear_cache',我可能沒有使用正確的字符串。我也清除了Symfony緩存(以及所有Composer生成的自動加載器),但沒有成功。 – 2013-02-15 13:31:29