我已经构建了一个简单的 CAPTCHA PHP 脚本,现在我正在尝试创建一个脚本,为视力不好或根本看不见的人生成 mp3 音频。我的目标只是挑战自己,所以我不想使用外部库,但我会很感激一些帮助。我尝试使用 file_put_contents() 函数合并音频(每个字母都有一个 mp3 音频),令我惊讶的是,它起作用了,但对我来说,像加入文本文件一样加入音频文件似乎是不正确的。 所以我的第二次尝试是这样做:
<?php
session_start();
$letter_array = str_split($_SESSION["captcha"]); //this is an array with the letters of the captcha
header('Content-Type: audio/mpeg');
header('Cache-Control: no-cache');
header('Pragma: no-cache');
header('Expires: 0');
$audio = '';
foreach ($letter_array as $letter) {
$audio .= file_get_contents("audios/".$letter.".mp3");
}
echo $audio;
?>
然后我可以将这个文件嵌入到 HTML 中的一个标签中,它也可以工作。我知道这两种解决方案本质上都是相似的,但我发现第二种方式更简洁。我的问题是:虽然它工作正常,但以这种方式做这样的事情是否可以,或者是错误的,还是不推荐的?我不太了解编码和 mp3 文件的结构,所以我不知道这个解决方案是否适用于所有人。我也乐于接受建议
谢谢
最佳答案
大多数情况下,是的。
普通的 MP3 文件只是一系列 MPEG 帧。只要它们具有相同的采样率和 channel 数,您就可以安全地连接它们。您可以混合和匹配比特率。
虽然有一些注意事项。首先,MP3 文件通常带有 ID3 标签。您会想要丢弃这些标签,因为它们应该位于特定位置。
此外,了解位库也很重要。这对您来说不是问题,因为您连接的是完全编码的文件,但如果您必须拆分一个流,请务必注意来自一个流的数据可以放入其他帧中。这是为了允许在更复杂的帧上使用更多的带宽,而在不需要的地方使用更少的带宽。
不过,归根结底,您真的不应该构建自己的验证码。对于某人来说,编写可能 5 行代码来匹配您的音频样本并挑选出数字是微不足道的。更不用说,您可能会造成可访问性问题。我强烈建议您查看 Google reCAPTCHA。当前版本对您的用户没有干扰,并且可能比您提议的版本安全得多。 https://www.google.com/recaptcha/intro/v3.html
关于php - 通过连接和 header ('Content-Type: audio/mpeg' 使用 php 合并 mp3 音频是否正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63142248/