所以首先我想告訴我,我是相當新手頭使用和播放輸出緩衝區。所以即時通訊開發PHP的portlet liferay和我有一些文件下載的問題。我試圖用'一個href'來做到這一點,但問題是,通過PHP上傳的文件不可用,直到Apache刷新,所以我試着用header()函數的另一種方式。php force下載使用標題()破解下載的文件
所以我會盡力解釋我的問題。當我在簡單的PHP項目嘗試下面的代碼,它工作正常:
<?php
$path = "/mysecretdir/upload/"; // change the path to fit your websites document structure
$fullPath = $path.$_GET['download_file'];
if ($fd = fopen ($fullPath, "r")) {
$fsize = filesize($fullPath);
$path_parts = pathinfo($fullPath);
$ext = strtolower($path_parts["extension"]);
switch($ext) {
case "pdf":
$ctype = "application/pdf";
break;
case "exe":
$ctype = "application/octet-stream";
break;
case "zip":
$ctype = "application/zip";
break;
case "doc":
$ctype = "application/msword";
break;
case "xls":
$ctype = "application/vnd.ms-excel";
break;
case "ppt":
$ctype = "application/vnd.ms-powerpoint";
break;
case "gif":
$ctype = "image/gif";
break;
case "png":
$ctype = "image/png";
break;
case "jpeg":
$ctype = "image/jpg";
break;
case "jpg":
$ctype = "image/jpg";
break;
case "mp3":
$ctype = "audio/mp3";
break;
case "wav":
$ctype = "audio/x-wav";
break;
case "wma":
$ctype = "audio/x-wav";
break;
case "mpeg":
$ctype = "video/mpeg";
break;
case "mpg":
$ctype = "video/mpeg";
break;
case "mpe":
$ctype = "video/mpeg";
break;
case "mov":
$ctype = "video/quicktime";
break;
case "avi":
$ctype = "video/x-msvideo";
break;
case "src":
$ctype = "plain/text";
break;
default:
$ctype = "application/force-download";
}
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private",false);
header("Content-type: " . $ctype);
header("Content-Disposition: attachment; filename=\"".$path_parts["basename"]."\"");
header("Content-Transfer-Encoding: binary");
//header("Content-length: $fsize");
header("Cache-control: public"); //use this to open files directly
while(!feof($fd)) {
echo fread($fd, 4096);
flush();
}
}
fclose ($fd);
?>
從的index.php IM與HREF = 「的download.php download_file = /事/?」
好了,但現在的點調用它。當我在liferay portlet中使用它時,該文件很奇怪。它將整個生成的HTML文件放入創建的文件中。所以它壞了。我不知道爲什麼。我不知道如果標題是從其他地方發送一些信息,也不知道如何解決它。
我正在尋找一些解決方案的小時,但不知道如何使標題「會話」,因爲我認爲他們有問題。如果沒有回聲,它只會打印文件的內容,並在其他項目中 - 更簡單的PHP應用程序不作爲它的工作門戶的一部分!但也許我錯了。
那麼請有人能幫助我嗎?有任何建議嗎?
您的代碼允許惡意用戶下載服務器上的任何文件。考慮'download.php?download_file = ../../../../etc/passwd'。而且,整個FOPEN/FREAD業務是毫無意義的。只需使用'readfile()'。加...爲什麼硬編碼MIME類型?有[finfo](http://php.net/finfo)允許你處理任何服務器知道的mimetype。 –
我只是在尋找一些解決方案,這是我發現並嘗試使用的一種解決方案。那我能做些什麼來連結它?並且它仍然不能解決我的問題與輸出:( –