2014-02-19 72 views
0

我試圖生成一個.html文件並將其下載。創建文件並下載它php

我的問題:首先我檢查文件是否存在,如果爲真我刪除它並創建一個新的。

當我點擊生成文件時,下載的文件始終是第一個創建的文件,並沒有更新。我檢查了文件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

沒有關閉:如果(空($錯誤)){ – SteAp

回答

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>"; 

這是不是最好的方法,但可能快(易)一個

添加一個參數就是每一次不同的(與和時間()「?」)將使瀏覽器認爲該下載頁面也不同,所以它會下載它的最新版本

+0

我這個解決方案tryied和它的作品很好,但我在尋找另一種選擇,你能幫忙嗎? –

+0

嘗試第一個解決方案,加元對的index.html –

1

僞造的各個環節是新

一種技術來防止可下載獲得緩存是提供一個時間斯塔姆p'僞造'每個鏈接到新的相同腳本。取而代之的

someScript.php 

一個使用

someScript.php?notUsedParameter=342342376 

諾埃,該參數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);