2014-07-15 58 views
0

我有下面的PHP代碼:設置內容類型標題前的PHP回顯?

function download_file($file, $description=null, $filename=false){ 
    $filename = $filename || basename($file); 
    ob_start(); 
    if(is_string($description)){ 
     $description = preg_replace("/\$1/", $filename, $description); 
     echo $description; 
    } 
    sleep(2); 
    header('Content-Type: '.$this->file_mimetype($file)); 
    header("Content-Transfer-Encoding: Binary"); 
    header("Content-disposition: attachment; filename=\"" . basename($file) . "\""); 
    readfile($file); 
    header("Content-Type: text/html"); 
    ob_end_flush(); 
} 
download_file("https://raw.githubusercontent.com/Gethis/ED/master/easydevop.class.php", "Downloading easydevop.class.php"); 

的問題是,它不附和「下載easydevop.class.php」下載之前。我也試過在所有標題後迴應它,但那也不起作用。請幫忙嗎?

正如你可以看到我沒有使用ob_start()ob_end_flush()

回答

1

不能使用「回聲」(顯示HTML內容),並在同一時間將文件發送給用戶。 你可以先顯示HTML頁面,然後將用戶重定向到文件,使用 HTML重定向

<META HTTP-EQUIV="REFRESH" CONTENT="0;URL=http://url.to/file/or_script/that_send_file/"> 

或JavaScript重定向How do I redirect with Javascript?

+0

或標題重定向:'header('Refresh:http:// ....');' – Marek

+0

或Location:Header – Farkie

0

正如我已經提到的下載文件時,您不能顯示回聲。當你下載文件時,你可以下載文件,僅此而已。

但是使用JavaScript,您可以在開始下載之前顯示消息。這裏是測試腳本:

<?php 
if (isset($_GET['id'])) { 
    $file = 'testfile.txt'; 
    header('Content-Description: File Transfer'); 
    header('Content-Type: application/octet-stream'); 
    header('Content-Disposition: attachment; filename='.basename($file)); 
    header('Expires: 0'); 
    header('Cache-Control: must-revalidate'); 
    header('Pragma: public'); 
    header('Content-Length: ' . filesize($file)); 
    readfile($file); 
    exit;   
} 
?> 

<!DOCTYPE html> 
<html> 
<head> 
     <meta charset="utf-8" /> 
</head> 
<body> 

    <script type="text/javascript"> 
    function showDownload(message) { 
     document.getElementById("hidden").innerHTML = message; 
     document.getElementById("link1").style.display = 'none'; // you can even hide download link if you want 
    } 
    </script> 

<div id="hidden"></div> 
<a href="download.php?id=1" onclick="showDownload('You are downloading file id = 1'); return true;" id="link1">Download</a> 
</body> 
</html>