2009-12-22 106 views
1

我只是想知道是否有一種方式,通過PHP下載時設置不同的「內容類型」?如.mp3和.pdf等。而不是隻需指定一種文件類型。我的問題是,我有兩種文件類型要下載,一種是pdf,另一種是mp3,但如果我將「content-type」更改爲audio/mpeg,則不會顯示擴展名。 pdf ...我希望你明白嗎?請幫忙!PHP下載所有文件類型

回答

0

此功能爲我的偉大工程:

function Download($path, $speed = null) 
{ 
    if (is_file($path) === true) 
    { 
     set_time_limit(0); 

     while (ob_get_level() > 0) 
     { 
      ob_end_clean(); 
     } 

     $size = sprintf('%u', filesize($path)); 
     $speed = (is_null($speed) === true) ? $size : intval($speed) * 1024; 

     header('Expires: 0'); 
     header('Pragma: public'); 
     header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); 
     header('Content-Type: application/octet-stream'); 
     header('Content-Length: ' . $size); 
     header('Content-Disposition: attachment; filename="' . basename($path) . '"'); 
     header('Content-Transfer-Encoding: binary'); 

     for ($i = 0; $i <= $size; $i = $i + $speed) 
     { 
      echo file_get_contents($path, false, null, $i, $speed); 

      while (ob_get_level() > 0) 
      { 
       ob_end_clean(); 
      } 

      flush(); 
      sleep(1); 
     } 

     exit(); 
    } 

    return false; 
} 

您也可以選擇指定在該文件中提供的最高速度。

+0

對我來說,octet-stream什麼都不做,它發送一個沒有擴展名的文件,而且我使用firefox developer edition – nosthertus 2014-11-26 16:49:48

2

如果您的意思是您的用戶正在下載一些PHP腳本發送的內容,該腳本也正在發送HTTP頭,那麼您是否可以不爲每種類型的文件設置不同的值?

像這樣的東西(僞代碼)

if (file is a PDF) { 
    header('Content-type: application/pdf'); 
} else if (file is a MP3) { 
    header('Content-type: audio/mpeg'); 
} 

和一個「默認」的情況下可能是有用的,如果你也有你有沒有想過,只是還沒有一些其他的文件。