清除drupal缓存 - php脚本

时间:2011-03-08 09:05:18

标签: php drupal caching flush

我正在编写一个php脚本,可以让人们改变他们的drupal网站的主题。到目前为止,这么好,但最后一件事我无法弄明白。每次提交表单时,数据库都会更改,但主题不会更改。显然,我还必须清除缓存。我在Drupal网站上找到了这个:

<?php include_once './includes/bootstrap.inc'; drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL); drupal_flush_all_caches(); ?>

我应该使用这个脚本创建一个小文件'clear.php',每次我想清除缓存时,我都应该转到这个文件并清除缓存中的内容......

但他们是我的问题。我不知道如何在我的脚本中调用此页面。 当然我可以制作一个按钮,将用户重定向到这个页面,但我喜欢它在一个脚本中。

有什么想法吗?或者是他们使用php刷新Drupal缓存的其他方法吗?

提前致谢!

5 个答案:

答案 0 :(得分:3)

一些提示:

  • 为什么不在表单的_submit挂钩中调用drupal_flush_allcaches();?那你就不需要引导了。
  • 您还可以使用hook_menu在自定义模块中创建带有函数回调的菜单项,然后将其放在您的代码段中。再次无需引导。

  • 如果确实需要单独的脚本,请将其放在安装的根文件夹中,然后调用mysite.com/clear.php。如果你把它放在其他地方,你应该改变bootstrap.inc的路径(因为它是一个相对路径)

  • 当您只需要刷新其中一个缓存时,请不要刷新所有缓存:尝试cache_clear_all('theme_registry', 'cache', TRUE);

答案 1 :(得分:1)

Tadaa,做到了:)

只需在我的脚本中粘贴这篇文章:

$deletecachesql = "DELETE FROM cache"; $deletecachequery = mysql_query($deletecachesql) or die ("error").mysql_error(); $deletecacheresult = mysql_fetch_array($deletecachequery);

脚本确实清除了缓存,但我不确定这是一件好事。该网站还告诉我删除:

  • DELETE FROM cache;
  • 删除来自cache_menu;
  • DELETE FROM cache_filters;
  • 从缓存中删除;
  • DELETE FROM watchdog;

这是明智的做法吗?要像这样清除(删除)缓存吗?

答案 2 :(得分:0)

答案 3 :(得分:0)

小心使用mysql语句以编程方式清除缓存。

这可能会破坏整个drupal注册表,你最终可能会在drupal bootstrap上出现一个空白页面,所以即使是drush也可能会失败。

修复此问题的唯一方法是使用&#34; registry_rebuild&#34;从这里: https://drupal.org/project/registry_rebuild

我试图昨天手动清除缓存并以此方式结束。 我强烈建议继续使用以下内容:

cache_clear_all(NULL, 'cache_page');
OR
drupal_flush_all_caches();

答案 4 :(得分:0)

在任何纯文本编辑器中打开 settings.php(/sites/default/settings.php)。将此行添加到文件末尾并保存:

$settings['rebuild_access'] = TRUE;