已经提出了类似类型的问题,但没有一个是有帮助的。我想要显示的工作音频文件(.mp3或.wav)在php页面从mysql数据库。我尽了最大努力,但音频文件不能播放。,#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的输出中,audiofile正在显示,但它不工作(灰色)。我希望它能起作用。
发布于 2019-05-13 00:28:24
我已经检查了echo $remitem;打印与我要播放的扩展名完全相同的audiofile。
那你为什么要用base-64编码呢?src
需要一个URL (或base64编码的二进制数据,但您没有二进制数据,您有一个文件名),所以只需使用文件名:
<source src="<?php echo htmlspecialchars($remitem); ?>" type="audio/wav">
注意 htmlspecialchars()
的用法在这里。这是因为您直接将用户输入输出到页面。这是一个潜在的安全漏洞,您需要确保用户没有精心制作到您的页面的链接,这会导致您的代码危及您站点上的其他用户。更多关于这个主题的信息可以在here上找到。
一旦您以URL形式链接到文件名,下一个问题就变成...这是正确的URL吗?好吧,这由你决定。你有一个文件名,但是实际的文件在哪里呢?文件系统上的该位置需要转换为web服务器上的URL。这取决于您确定该文件的URL是什么。完成后,您可以进行所需的任何修改(例如在URL中为文件名添加文件夹前缀,创建相对或绝对URL,等等)若要将文件名转换为有效的URL以检索文件,请执行以下操作。
https://stackoverflow.com/questions/56101179
复制相似问题