无论如何流式传输音频文件而不提供文件的complete path
。
例如,每当我们尝试使用HTML5音频标签或使用javascript播放mp3
文件时,我必须提供类似于此的mp3文件的完整路径
<audio controls>
<source src="http://example.com/file/hello_name.mp3" type="audio/mpeg">
</audio>
所以,我认为我们可以提供一个id
的mp3文件,而不是文件的complete path
,应该是这样的:
<audio controls>
<source src="http://example.com/stream.php?file_id=111" type="audio/mpeg">
</audio>
答案 0 :(得分:0)
通常,您会stream.php
通过发送带有header()的正确标头和提供readfile()的数据来提供二进制数据(例如,对于file_id == 111,如您的示例所示)您在file_id
与数据库中的物理文件或类似物之间存在关系。
请谨慎使用readfile()
,并注意它只会输出它告诉的内容,因此请确保您的应用程序不允许有人告诉它输出其他内容,例如配置文件和数据库密码等。
答案 1 :(得分:0)
您的stream.php文件将如下所示:
<?php
// Say you hava a table "file_paths" with two columns file_id and file_path
$sql = $pdo->prepare("SELECT FROM file_paths WHERE file_id = ?");
$sql->bindValue(1, $_GET['file_id'], PDO::PARAM_INT);
$sql->execute();
$fetch = $sql->fetchObject();
// retrieve file path using its id
$path = $fetch->file_path;
header("Location: " . $path);
?>
然后在目标页面上,通过将file_id传递给stream.php来添加播放器,如下所示:
<audio controls>
<source src="stream.php?file_id=123" type="audio/mpeg">
</audio>