2

尝试在我们的网络服务器上查看 *.wav URL 时,数据无法正确传输。

我们正在使用 apache2 和 php5.10。apache重写规则包括:

RewriteRule ^(.+)\.(wav)$ /wav.php?wav=$1.$2 [L,NC]

来自 wav.php 的相关代码是:

<?php
$image = getPassed("wav");
header( 'Content-Type: audio/wav');
set_include_path("/");
readfile($image, true);
exit;
?>

当通过 Web 浏览器访问 server.company.com/filepath 时,这应该返回服务器上的任何 .wav 文件。

尝试在 ubuntu 中收听 firefox 或 chrome 中的任何 *.wav 文件(尚未测试其他操作系统)时,插件错误:“找不到位置。” 但是,右键单击并选择“将链接另存为”允许用户下载 .wav 文件。

有什么想法吗?

编辑:

getPassed 是一个从 $_GET 或 $_POST 返回变量的函数

4

1 回答 1

1

我认为您需要更多的标头才能使此功能正常工作,而不是 100% 确定,因为我从未尝试过流式传输文件。

header( 'Content-Type: audio/wav');
header("Content-Transfer-Encoding: binary"); 
header("Content-Length: " . filesize($image) ."; "); 
header('filename="'.$image . '"; '); 

无论哪种方式,都值得一试。您可能还想尝试 的内容类型Content-Type: application/octet-stream;,您可能还想尝试使用readfile_chunked()(php.net 上的用户贡献函数)“分块”文件,看看这是否也有帮助。

希望能帮助到你。

于 2010-07-22T21:13:38.997 回答