2016-10-25 39 views
0

在我的網站上,我有一個使用PHP函數的JavaScript函數在我的服務器(與網站文件相同的目錄)上本地創建一個文件。這個文件的名字只​​爲這些JavaScript和PHP函數所知。 我想打開一個定期的「另存爲」框給用戶下載這個文件。 有沒有辦法使用JavaScript/PHP以適用於Firefox,Chrome和Explorer/Edge的方式執行此操作? (只有使用Javascript/PHP知道文件名)使用Javascript/PHP的「另存爲」框

這是PHP例子:

file_put_contents($filename,$txt); 

header('content-type: application/text'); 
header('content-disposition: attachment; filename=' . $filename); 

readfile($filename); 

回答

2

在Chrome & Firefox瀏覽器會自動保存,並在IE中打開一個窗口,因此如果用戶沒有改變它們的設置默認情況下他們會看到保存對話框的位置,而不管他們使用的瀏覽器如何。去

https://support.google.com/chrome/answer/95574?hl=en-GB

欲瞭解更多信息。您可以使用php代碼從服務器上下載文件。

header('content-type: application/[type]'); 
header('content-disposition: attachment; filename=yourfile.file-extension'); 
readfile('yourfile.file-extension'); 

爲一個大的文件,你可以使用

function readfileChunked($filename, $retbytes=true){ 
$chunksize = 1*(1024*1024); 
$buffer = ''; 
$cnt = 0; 
$handle = fopen($filename, 'rb'); 

if ($handle === false) { 
    return false; 
} 

while (!feof($handle)) { 
    $buffer = fread($handle, $chunksize); 
    echo $buffer; 
    ob_flush(); 
    flush(); 
    if ($retbytes) { 
     $cnt += strlen($buffer); 
    } 
} 

$status = fclose($handle); 

if ($retbytes && $status) { 
    return $cnt; // return num. bytes delivered like readfile() does. 
} 

return $status; 
} 
header('Pragma: public');  // required 
header('Expires: 0');  // no cache 
header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); 
header('Cache-Control: private',false); 
header('Content-Type: application/force-download'); 
header('Content-Disposition: attachment; filename="'.$name.'"'); 
header('Content-Transfer-Encoding: binary'); 
header('Content-Length: '. get_remote_size($url)); 
header('Connection: close'); 
readfileChunked($url); 
+0

使用此代碼,該文件(.txt)內容顯示在網頁本身,而不是下載的文件... –

+0

@ JohnEllis看到我改變的答案。 – Kumar