如何从MySQL在PHP页面中显示音频格式?

时间:2019-05-12 16:23:47

标签: php html mysql

已经问过类似类型的问题,但没有帮助。我想在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的输出中,音频文件正在显示,但不起作用(灰色)。我希望它能正常工作。

1 个答案:

答案 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来检索文件。