将mp3流式传输到浏览器而不是将数据保存为文件

时间:2012-05-14 22:27:17

标签: php streaming readfile

我使用以下php类将文本转换为语音:http://www.masnun.me/2009/12/14/googles-text-to-speech-api-a-php-wrapper-class.html

它使用谷歌的API,现在代码在本地保存文件,但我希望它强制将文件流式传输到用户的浏览器。这就是我提出的:

function saveToFile($filename) {
    $filename = trim($filename);
    if(!empty($filename)) {
            header("Content-type: application/octet-stream");
            header('Content-length: ' . filesize($this->mp3data));
            header('Content-Disposition: filename="' . $filename);
            header('X-Pad: avoid browser bug');
            header('Cache-Control: no-cache');
            readfile($this->mp3data);
    } else { return false; }
}

但生成的文件是0kb空mp3文件。我做错了什么?

2 个答案:

答案 0 :(得分:2)

readfile()接受文件名作为参数,而不是文件的内容。 尝试用以下内容替换readfile行:

echo $this->mp3data;

答案 1 :(得分:1)

readfile是否真的回应了浏览器?如果它只是返回一些东西,它将无法按预期工作:

echo readfile($this->mp3data);

我也理解readfile适用于路径,如果是这种情况,请尝试:

echo $this->mp3data;