Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/88.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在mysql的PHP页面中显示音频格式?_Php_Html_Mysql - Fatal编程技术网

如何在mysql的PHP页面中显示音频格式?

如何在mysql的PHP页面中显示音频格式?,php,html,mysql,Php,Html,Mysql,已经提出了类似类型的问题,但没有一个是有用的。我想在mysql数据库的php页面中显示工作音频文件.mp3或.wav。我尽了最大努力,但音频文件无法播放。代码1 <html> <form method="post" action="searchbook.php"> <div class="search"> <input type="text" name="searchword" class="searchTerm"> <button type

已经提出了类似类型的问题,但没有一个是有用的。我想在mysql数据库的php页面中显示工作音频文件.mp3或.wav。我尽了最大努力,但音频文件无法播放。代码1

<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>
若我在代码下面写的不是上面的代码,而是文件成功下载,代码4

<?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中,它显示“不支持此类型的音频文件”

在代码3的输出中,音频文件正在显示,但它不是灰色的。我希望它能工作

我已经查过了;打印与我要播放的扩展名完全相同的音频文件名

那你为什么要用base-64编码呢?src需要URL或base-64编码的二进制数据,但您没有二进制数据,您有文件名,因此只需使用文件名:

<source src="<?php echo htmlspecialchars($remitem); ?>" type="audio/wav">
请注意此处使用的htmlspecialchars。这是因为您直接将用户输入输出到页面。这是一个潜在的安全漏洞,您需要确保用户没有创建指向您页面的链接,这会导致您的代码危害您站点上的其他用户。关于这个主题的更多信息可以找到


一旦您将文件名作为URL链接,下一个问题将变成。。。这是正确的URL吗?好吧,这取决于你。您有文件名,但实际文件在哪里?文件系统上的该位置需要转换为web服务器上的URL。由您决定该文件的URL是什么。一旦你有了这些,你可以进行任何必要的修改,例如在URL中为文件名添加文件夹前缀,创建相对或绝对URL等,以将文件名转换为有效的URL来检索文件。

base64\u编码的目的是什么?为什么不提及您的输入变量包含的内容呢?$REMIEM的示例值是多少?该文件是否确实存在于您的服务器上?@franzgleichman,$REMIEM存在于服务器中,其值显示为1557673700.wav全部更正不,您没有提及您从另一个答案复制了它。更不用说这个答案了。请帮忙!坦率地说,这很烦人。@UtpalGaurav:这只会让整个问题变得不那么清楚。请详细说明您的值是什么,您得到的输出是什么,问题是什么,等等。这是一个练习一些调试并深入挖掘的机会,而不是它不起作用。浏览器中页面源中的确切HTML是什么?你期望HTML是什么?在浏览器的调试工具网络选项卡中对音频文件提出了什么请求?服务器对该请求的响应是什么?base-64编码的值是多少?你为什么要对它进行编码?