我正在尝试生成一个.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>"
;
答案 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);