创建文件并下载它的PHP

时间:2014-02-19 23:26:44

标签: php html download

我正在尝试生成一个.html文件并下载它。

我的问题:首先我检查文件是否存在,如果是,我删除它并创建一个新文件。

当我点击生成文件时,下载的文件始终是第一个创建并未更新的文件。我已经检查了文件manualy并且确定,但下载的是旧的。如果我删除服务器上的文件,我仍然可以下载。

检查网站:bit.ly/1crrcif

$content =  "<html></head></head><body>All content here</body></html>";

   if( empty( $error )){ 

   echo "<h3>File generated</h3>";
   $my_file = 'change_nameto_index.html';
   if (file_exists($my_file)) {
       echo "file exists";
      unlink($my_file);
   }

   $new_file = 'change_nameto_index.html';
   $handle = fopen($new_file, 'w') or die('Cannot open file:  '.$new_file);
   $data = $content;
   fwrite($handle, $data);
   fclose($handle);
   echo "<a download='change_nameto_index.html' href='change_nameto_index.html'>"
      . "<b class='download'>Download</b></a>"
      ;

2 个答案:

答案 0 :(得分:1)

解决方案1: 尝试将此添加到您的下载页面头:

<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Expires" content="0" />

解决方案2:

我认为这是'缓存问题'。试试这个:

echo "<a download='index.html?".time()."' href='index.html?".time()."'><b class='download'>Download</b></a>";

这不是最好的方法,但可能是快速(和简单)的方式

添加每次不同的参数(使用'?'和time())将使浏览器认为下载页面也不同,因此它将下载它的最新版本

答案 1 :(得分:1)

将每个链接伪装成新的

防止可下载缓存的一种技术是提供一个时间戳,以“伪造”每个链接到新的相同脚本。而不是

  someScript.php

一个人使用

   someScript.php?notUsedParameter=342342376

Noe,脚本不使用参数notUsedParameter。它仅用于将someScript.php的链接标记为客户端浏览器的新链接。

这种常用技术是最常用的,可能是最稳定的

下一种技术在某种程度上取决于浏览器。例如。 Internet Explorer对缓存/代理控制标头有点挑剔。

在IE 8之前和之后,某些缓存/代理控制标头有效地阻止了基于SSL的下载请求。 Microsoft已意识到此问题并建议更改注册表。

强制浏览器/代理不保存链接的内容

另一种选择是告诉浏览器/代理不要缓存当前请求。

header('Pragma: public');   
header('Expires: 0');       
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Last-Modified: Date Wed, 19 Feb 2000 23:45:13 GMT' );
header('Cache-Control: private', false);