已经问过类似类型的问题,但没有帮助。我想在mysql数据库的php页面中显示工作音频文件(.mp3或.wav)。我已经尽力了,但是音频文件没有播放。#code1
<html>
<form method="post" action="searchbook.php">
<div class="search">
<input type="text" name="searchword" class="searchTerm">
<button type="submit" class="searchButton">SEARCH</button>
</div>
</form>
</html>
我从上面的文件中将用户输入的值传递给了下面的searchbook.php文件#code2
<html>
$searchword=$_POST['searchword'];
$con=mysqli_connect('localhost','root','','bookspyramid');
$sql="SELECT audiono FROM bookinfo where bookname like '%$searchword%'";
if($result=mysqli_query($con,$sql))
{
if(mysqli_num_rows($result)>0)
{
while($row=mysqli_fetch_array($result))
{
echo "<a href='..\datafile/viewaudio.php?del=$row[audiono]'>Download AudioBook </a>";
}
}
}
</html>
从上面的代码中,我将audiono的值传递给了以下viewaudio php文件#code3
<html>
<?php
$remitem=$_GET['del'];
$con=mysqli_connect('localhost','root','','bookspyramid');
?>
<audio controls style="width: 90%; margin-left: 5%;">
<source src="data:audio/wav;base64,<?php echo base64_encode($remitem); ?>" type="audio/wav">
</audio>
</html>
如果我不是在上面的代码中编写下面的代码,而是成功下载了文件#code4
<?php
$remitem=$_GET['del'];
header('Content-type: application/audio');
header('Content-Disposition: inline; filename="' . $remitem . '"');
header('Content-Transfer-Encoding: binary');
header('Accept-Ranges: bytes');
@readfile($remitem);
?>
但是如果我想显示音频格式(在线播放)。在Edge中,它显示“不支持这种类型的音频文件”
在#code3的输出中,音频文件正在显示,但不起作用(灰色)。我希望它能正常工作。
答案 0 :(得分:1)
我检查了echo $ remitem;打印与我要播放的扩展名完全相同的音频文件名称。
那为什么要对base-64进行编码? src
需要一个URL(或base-64编码的二进制数据,但是您没有二进制数据,但是有一个文件名),因此只需使用文件名:
<source src="<?php echo htmlspecialchars($remitem); ?>" type="audio/wav">
注意在此处使用htmlspecialchars()
。这是因为您直接将用户输入输出到页面。这是一个潜在的安全漏洞,您需要确保用户没有设计到您页面的链接,这会导致您的代码破坏您网站上的其他用户。有关该主题的更多信息,请参见here。
一旦您以URL链接到文件名,下一个问题就会变成...这是正确的URL吗?好吧,这取决于您。您具有文件的名称,但是实际文件在哪里?文件系统上的该位置将需要转换为Web服务器上的URL。由您决定该文件的URL。修改后,您可以进行任何必要的修改(例如,在URL中为文件名添加文件夹前缀,创建相对URL或绝对URL等),以将文件名转换为有效URL来检索文件。>