保存在drupal节点中时删除了PHP header()函数代码(php过滤器)

时间:2014-01-16 11:41:09

标签: php drupal drupal-7

我试图在drupal节点中包含一些标头代码,使用PHP过滤器作为文本过滤器,以强制下载zip文件。

我的标题代码如下所示(http://davidwalsh.name/php-force-download):

  header('Pragma: public');     // required
  header('Expires: 0');     // no cache
  header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
  header('Last-Modified: '.gmdate ('D, d M Y H:i:s', filemtime ($file_name)).' GMT');
  header('Cache-Control: private',false);
  header('Content-Type: '.$mime);
  header('Content-Disposition: attachment; filename="'.basename($file_name).'"');
  header('Content-Transfer-Encoding: binary');
  header('Content-Length: '.filesize($file_name));  // provide file size
  header('Connection: close');
  readfile($file_name);     // push it out

但我的问题是,当我保存节点时,标题代码会消失。

为了保存节点,我需要设置drupal吗?

2 个答案:

答案 0 :(得分:0)

只有在没有其他内容输出到浏览器时才能使用标题。

当Drupal完成渲染时,您的主题模板的节点部分已经输出,因此标题将不再起作用并导致PHP错误。

此外,通过将代码放入节点主体中,它存储在数据库中,使调试和版本控制变得困难,如果不是不可能的话。我个人认为PHP过滤器是一个可怕的错误,应该从未包含在Drupal中。它将在D8中从核心中删除。

从长远来看,通过将代码放在自定义模块中,您将为自己省去很多麻烦。看看this tutorial ...

答案 1 :(得分:0)

正如Felix所提到的,在节点中删除自定义代码通常是不好的做法,特别是如果你要在Drupal中使用大型自定义应用程序。

但是,如果您想要覆盖已在PHP中设置的HTTP标头,则可以使用header_remove()来执行此操作。在代码之前放置该函数调用将实现您想要的。