2011-10-03 47 views
9

我有一個mp3我的服務器(網址只是一個例子)上:如何從php腳本返回時支持尋找mp3?

http://www.my-server.com/testmp3.php 

包含以下代碼(我here

http://www.my-server.com/myaudio.mp3 

我在有服務器上的PHP腳本):

<? 
$file = "myaudio.mp3"; 

if (file_exists($file)) { 
    header('Content-Description: File Transfer'); 
    header('Content-Type: application/octet-stream'); 
    header('Content-Disposition: attachment; filename='.basename($file)); 
    header('Content-Transfer-Encoding: binary'); 
    header('Expires: 0'); 
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); 
    header('Pragma: public'); 
    header('Content-Length: ' . filesize($file)); 
    ob_clean(); 
    flush(); 
    readfile($file); 
    exit; 
} 
?> 

這是我必須做的模仿行爲,因此這兩個要求的行爲方式相同,並返回完全相同的反應呢?或者有什麼我失蹤了。

我使用的是iOS上的某些流的代碼(這裏不相關)和兩個請求流音頻不錯,但我卻無法正常使用求php的要求,我可以直接與MP3請求。

所以沒有進入對應用程序本身,我想先消除這一個變量的細節。有什麼我需要做的,以確保從另一個應用程序的角度來看,這兩個請求將返回完全相同的數據?

感謝您能在這裏給我任何輸入。

更新

原來我的問題真的應該讀「你怎麼支持從PHP腳本返回時尋求一個MP3的?」。

+0

有趣的問題。由於沒有特定的問題,可能會很適合_ [Code Review](http://codereview.stackexchange.com/)_。 –

+0

@MichaelJasper,具體問題(正如我所看到的)是「這個代碼是否完全模仿直接請求?」。 – jball

+0

這個小小的PHP腳本沒有完全實現HTTP請求和repsonse處理。你不能指望它像一個完整的HTTP服務器一樣處理所有的請求。 – hakre

回答

1

它可能會更好用的.htaccess的修改,而不是一些PHP代碼處理這個問題。
這裏有一個link on htaccess讓你開始。

如果你有,你想,而不是顯示爲下載的瀏覽器中播放它.mp3文件整個目錄,你只需修改.htaccess文件夾中包含

AddType application/octet-stream .mp3 
+0

這不是一個很好的做法。您可能想用PHP返回MP3的原因很多,例如從數據庫中讀取參數以獲取正確的文件。儘管如此,將類型更改爲「application/octet-stream」並不是強制下載的適當方式。接收端應如何明確確定類型?適當的方法是設置內容處置標題。 – Brad

+0

您發送一個'302 Moved Temporarily'標題將它們轉發到正確的文件。現在,如果您想阻止人們共享下載鏈接或需要身份驗證下載,這不是要走的路,但對於大多數情況下,這可以工作得很好。 –