2011-10-03 44 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'标题将它们转发到正确的文件。现在,如果您想阻止人们共享下载链接或需要身份验证下载,这不是要走的路,但对于大多数情况下,这可以工作得很好。 –