2006年8月12日 星期六

使用php下載

之前寫的下載副程式有點問題,
就是要下載的檔案過大時會沒有任何動作,
解決方法是修改php.ini的暫存值,但是會導致下載人數一多,網站就會掛點,
今天把程式碼改了一下,就可以下載大檔案了,
程式碼如下


function Use_PHP_Download($Download_Filename)
{

//== 使用PHP間接下載( 隱藏下載網址 )
//== 傳入參數為下載檔案名稱,包含完整路徑
//== 例如:
Use_PHP_Download ( 檔案路徑 )

//使用php間接下載檔案

//-----------------------------------------------------------------------------------------------------------------
//先檢查是否有輸入檔名和路徑,再來檢查是否檔案存在,只要其中一個錯誤就顯示錯誤並直接跳出Function

if( $Download_Filename == "" )
{
echo "<html><body>未指定檔案路徑及名稱!</body></html>";
exit;
} elseif ( ! file_exists( $Download_Filename ) )
{
echo "<html><body>找不到檔案!<br>";

//不要顯示找不到檔案的路徑,否則會曝露檔案位置
//echo $Download_Filename.'</body></html>';

exit;
};

//-----------------------------------------------------------------------------------------------------------------

//取最後三個字,也就是讀出副檔名,好利用SWITCH做判斷是否可以下載及下載類列

$ext1 = substr($Download_Filename,-3);
switch ($ext1)
{

//這裡將檔案類型指定下載型態參數,並送出給php做下載

case "pdf":$ctype="application/pdf";break;
case "rar":
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 "jpg": $ctype="image/jpg"; break;
default:

//當然最後預防有心人士下載php或是其它我們不想讓別人下載的檔案
//所以除了我們指定可以下載的檔,其它一律不準下載

echo "<html><body>您不可以下載這個檔案!</body></html>";
exit;
}

//-----------------------------------------------------------------------------------------------------------------

//將要下載的檔案型態送到網頁上,並由使用者下載

if(!$fdl=@fopen($Download_Filename,'r')){
die("Cannot Open File!");
} else {
header("Cache-Control: ");
header("Pragma: ");
header("Content-type:".$ctype);
header("Content-Disposition:
attachment;filename=\"".basename($Download_Filename)."\"");
header("Content-length:".(string)(filesize($Download_Filename)));
sleep(1);
fpassthru($fdl);
}
}

沒有留言:

張貼留言