使 mp3 可搜索 PHP

2024-01-14

我做了这个PHP脚本




    $file_name = 'sample.mp3';

    header('Content-Type: audio/mpeg');

    $opts     = array('http' =>
                      array(
                          'method'           => 'GET',
                          'protocol_version' => 1.1,
                      )
    );
    $context  = stream_context_create($opts);
    $stream   = fopen($file_name, 'rb', FALSE, $context);
    $metadata = stream_get_meta_data($stream);
    $data     = stream_get_contents($stream);
    print($data);
    fclose($stream);

  

它可以成功地流式传输 mp3 媒体,但我无法找到也在 html5 中播放的 mp3 文件video标签无法从中提取元数据,请告诉我哪里做错了以及如何使此过程正常工作,谢谢


这里试试这个,支持部分下载和寻找任何文件大小,现在也可以在 Chrome 中正常工作:

<?php 
$file_name = './sample.mp3';
stream($file_name, 'audio/mpeg');

/**
 * Stream-able file handler
 *
 * @param String $file_location
 * @param Header|String $content_type
 * @return content
 */
function stream($file, $content_type = 'application/octet-stream') {
    @error_reporting(0);

    // Make sure the files exists, otherwise we are wasting our time
    if (!file_exists($file)) {
        header("HTTP/1.1 404 Not Found");
        exit;
    }

    // Get file size
    $filesize = sprintf("%u", filesize($file));

    // Handle 'Range' header
    if(isset($_SERVER['HTTP_RANGE'])){
        $range = $_SERVER['HTTP_RANGE'];
    }elseif($apache = apache_request_headers()){
        $headers = array();
        foreach ($apache as $header => $val){
            $headers[strtolower($header)] = $val;
        }
        if(isset($headers['range'])){
            $range = $headers['range'];
        }
        else $range = FALSE;
    } else $range = FALSE;

    //Is range
    if($range){
        $partial = true;
        list($param, $range) = explode('=',$range);
        // Bad request - range unit is not 'bytes'
        if(strtolower(trim($param)) != 'bytes'){ 
            header("HTTP/1.1 400 Invalid Request");
            exit;
        }
        // Get range values
        $range = explode(',',$range);
        $range = explode('-',$range[0]); 
        // Deal with range values
        if ($range[0] === ''){
            $end = $filesize - 1;
            $start = $end - intval($range[0]);
        } else if ($range[1] === '') {
            $start = intval($range[0]);
            $end = $filesize - 1;
        }else{ 
            // Both numbers present, return specific range
            $start = intval($range[0]);
            $end = intval($range[1]);
            if ($end >= $filesize || (!$start && (!$end || $end == ($filesize - 1)))) $partial = false; // Invalid range/whole file specified, return whole file
        }
        $length = $end - $start + 1;
    }
    // No range requested
    else $partial = false; 

    // Send standard headers
    header("Content-Type: $content_type");
    header("Content-Length: " . ($partial ? $length : $filesize));
    header('Accept-Ranges: bytes');

    // send extra headers for range handling...
    if ($partial) {
        header('HTTP/1.1 206 Partial Content');
        header("Content-Range: bytes $start-$end/$filesize");
        if (!$fp = fopen($file, 'rb')) {
            header("HTTP/1.1 500 Internal Server Error");
            exit;
        }
        if ($start) fseek($fp,$start);
        while($length){
            set_time_limit(0);
            $read = ($length > 8192) ? 8192 : $length;
            $length -= $read;
            print(fread($fp,$read));
        }
        fclose($fp);
    }
    //just send the whole file
    else readfile($file);
    exit;
}
?>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使 mp3 可搜索 PHP 的相关文章

  • php simpleXMLElement 到数组:空值

    我有以下 XML
  • JSON 为 foreach() 提供的参数无效

    我在从 JSON 检索数据时遇到一些问题 它总是说为 foreach 提供的参数无效 这是 url php 中的 JSON nama IT SERVICE SOLUTION nilai 0 periode 11 tahun 2014 nam
  • 在 Codeigniter 中编写模型代码的最佳方法是什么

    我对于在 codeigniter 中使用哪种技术来编码模型感到非常困惑 我进行了很多搜索 发现了各种编码人员使用的各种方法 请指导我使用 codeigniter 编写模型类的最佳方法 例子很少 有些方法签名中需要很长的参数 function
  • 安装 Symfony 2.4.1 lib-icu 4.4 依赖项时出现问题

    我遇到了与以下相同的问题this one https stackoverflow com questions 16753105 problems with lib icu dependency when installing symfony
  • Blade @if 中的 Laravel 会话变量

    当我尝试使用 Laravel Session 在刀片中设置 JS 变量来刷新一些数据时 我在 Laravel 4 2 中遇到了一些奇怪的情况 这很简单 我不知道我错过了什么 目标 在用户注册后立即触发 Javascript 网站浏览 方法
  • 使用键模式从 Laravel 4 缓存中删除?

    对于我的包 我们使用 Laravel 缓存 我们创建的每个缓存键都有前缀 所以我们得到mypackage config mypackage md5ofafilename有时我需要刷新我的包创建的所有缓存文件 问题是什么 我只知道缓存键的模式
  • :hover 状态在 iOS 上不会结束

    我有一个带有悬停状态的简单菜单
  • 用不同的颜色为 Google 热图着色

    我试图开发一个遵循 Google Map API 的热度 https developers google com maps documentation javascript examples layer heatmap https deve
  • 如何修复网站 iframe 错误?

    当我访问此网址时 警告 推荐使用一些广告拦截器 网页链接加载良好 没有错误 但是 当我尝试通过加载同一页面时iframe在我的html代码中 出现错误 我的html代码
  • 如何使用 PHP SDK 在 AWS SES 发送的电子邮件中实现 List-Unsubscribe 标头

    我尝试使用 AWS PHP SDK 添加自定义标头 以便可以实现 List unsubscribe 标头 问题是我找不到任何地方如何实现它 我已阅读文档但什么也没有 http docs aws amazon com aws sdk php
  • 混合数组和对象

    我有一个像这样的数组 Array count gt 2 0 gt stdClass Object term id gt 3109 name gt Aliens Colonial Marines slug gt aliens colonial
  • 从 XML 节点 PHP DOM 中删除所有子节点

    我想使用 PHP DOM 从 XML 节点中删除所有子节点 以下之间有什么区别 A while parentNode gt hasChildNodes parentNode gt removeChild parentNode gt chil
  • 如何仅使用CSS设置某个角的边框半径

    如上所示 我可以只给顶部部分而不给底部提供半径 或者有时给底部而不是顶部提供半径吗 有没有办法只给一个角提供边界半径 Like border radius top left top right bottom right bottom lef
  • 通过 Javascript 将图像切割成碎片

    我正在创建一个简单的拼图游戏 为了做到这一点 我需要将我正在使用的图片切成 20 块 Javascript 有没有办法将一张图片切成 20 个相等的部分 并将它们保存为网页中的 20 个不同的对象 或者我只需要进入 Photoshop 自己
  • Ajax JSON 数据和灯箱冲突

    我有一个带有灯箱插件的画廊设置光廊 http sachinchoolur github io lightGallery docs 该画廊与静态 HTML 完美配合 当我动态抓取 API 数据并尝试让灯箱处理这些项目时 问题就出现了 我似乎无
  • PHP 中的 MongoDB - 如何将项目插入集合中的数组中?

    这必须很容易 但我似乎无法弄清楚 假设我有一个集合users这是集合中的第一项 id ObjectId 4d8653c027d02a6437bc89ca name Oscar Godson email email protected cdn
  • 如何使用CSS将背景图像放入选择选项标签中

    我有一个从 json 响应接收的国家 地区下拉列表 并且想要在国家 地区名称旁边添加相应的国家 地区国旗图标 也从 json 响应获取图像 我已经尝试了不同的 jQuery 和 bootstrap 插件 但他们所做的是破坏我以前的选择框样式
  • PHP - Filter_var 替代方案?

    我构建了一个 php 脚本来输出以表单形式发布的数据 但遇到了问题 网站将运行的服务器运行 PHP 5 1 6 此版本的 PHP 不支持 filter var 我需要知道短期内的替代方案 最好是昨天 但在 Google 或 Stack Ov
  • 为什么我的图像下方有空间? [复制]

    这个问题在这里已经有答案了 图像在下面获得了神秘的空白空间 即使padding 0 margin 0被应用 示范 http jsfiddle net cLETP 红色边框应该包围图像 但底部有空间 造成这种情况的原因是什么 如何删除该空间
  • 更改javascript nodejs中所有页面的href url

    我已经实现了具有多种语言下拉菜单的引导导航栏 当我选择语言时 它将翻译页面 如何更改其他页面的 url 和按钮文本 当我选择french 将所有网址更改为 fr about and fr contact 如何使用 JavaScript 进行

随机推荐

  • Mongodb TTL 使文档提前过期

    我正在尝试将文档插入 Mongo 数据库并让它在预定时间后自动过期 到目前为止 我的文档已被插入 但总是会在 0 60 秒内从数据库中删除 即使我将 expireAfterSeconds 设置得更长 我知道 mongodb 大约每 60 秒
  • 具有重叠时隙的会议调度算法

    我想做类似的事情预约调度算法 N个人 N个忙闲时段 约束满足 https stackoverflow com questions 11143439 appointment scheduling algorithm n people with
  • 在Python中将秒转换为周-天-小时-分钟-秒

    我正在尝试编写一个 输入秒数 的 Python 脚本 并在周 天 小时 分钟和秒内获得结果 这是我所拥有的 但我没有得到正确的答案 我究竟做错了什么 seconds raw input Enter the number of seconds
  • Firebase 上 iOS 的 Flutter 集成测试?

    是否可以在 Firebase 上运行 Flutter 集成测试 这方面的信息似乎相互矛盾 一些消息来源说这是可能的 但文档 https pub dev packages integration test firebase test lab
  • 将 wpf 图像控件保存到文件的最简单方法

    我的 wpf 应用程序中有一个 Image 控件 里面有一个大图像 但控件本身只有 60x150 这意味着它只显示该图像的特定部分 将可见部分保存到文件的最简单方法是什么 感谢您的帮助 编辑 我最终使用了找到的代码here http nui
  • Fabric - 在所有任务完成之前和之后在本地运行命令

    我试图在我的结构脚本中宣布部署开始和结束 感觉这应该很容易 但对于我来说 我不知道该怎么做 env hosts www1 www2 www3 www4 def announce start code to connect to irc se
  • 关于从 VBScript 返回值到 .NET 的问题

    我正在尝试设置一个能够从 NET 运行 VBScript 文件的应用程序 请参阅here https stackoverflow com questions 2886155 how do i get back results running
  • 如何在discord.py 中设置可选参数?

    我尝试过在线研究 但没有其他问题能够帮助我解决问题 这是我的场景 我正在discord py 中创建静音命令 我希望时间是可选的 但如果未指定时间 我希望该参数成为原因的一部分 澄清我的意思 client command commands
  • 如何将应用程序日志动态输出到TextArea和文本文件?

    我有一个 javaFX 应用程序 但遇到日志记录问题 我不知道如何将日志动态输出到 JavaFX 中的 TextArea 并同时输出到文件 对于文件我有这样的设置 handlers java util logging FileHandler
  • jQuery 语法 - 何时使用 $(美元)与 jQuery [重复]

    这个问题在这里已经有答案了 这两者有什么区别 SPANID html Some Text jQuery SPANID html Some Text 它是原型还是 jQuery 他们都做同样的事情 大多数库使用 作为访问库内函数的更短方式 j
  • 设置标签属性并使用 nokogiri builder (ruby) 将纯文本内容添加到标签

    我正在尝试使用 Nokogiri 和一些标签构建 XML 这些标签内既有属性又有纯文本 所以我试图做到这一点
  • 关于 Gatsby 页面加载网络请求的澄清

    我正在学习 Gatsby 的工作原理 并且有一个有 2 个页面的网站 两个页面都有彼此的超链接 由于 gatsby 使用 javascript 捆绑包将网站编译为静态页面 因此我希望 html 链接单击事件触发对服务器的页面请求以加载sec
  • 为什么当发送者不是名义发送者时,WeakEventManager 不会触发事件?

    我不喜欢非标准模式 但我正在对我的应用程序进行快速测试 并且遇到了这种奇怪的行为 考虑一个公开事件的普通类 这里是非常常见的 PropertyChanged 但我认为可能是任何其他事件 订阅者选择通过 WeakEventManager 帮助
  • Android 中图像的填充图案

    下面给出了两个图像 我将第一个图像称为帧图像 将第二个图像称为帧图像 这里 fst 是我的线性布局 我将帧图像设置为它的背景图像 现在我想在帧图像的白色区域中填充图案图像 帧图像的外部区域是透明的 内部区域是白色的 我如何在我的框架图像中填
  • 关于渲染脚本

    最近在搜renderscript的文章 好像没有 谁能给我一些关于 renderscript 的文章吗 Renderscript 的资源 文档和教程仍然非常稀缺 这是我找到的地方 Renderscript 简介 第 1 部分和第 2 部分
  • 找不到模块:错误:无法解析“/home/user/Desktop/my_app/src”中的“./app”

    我开始创建我的应用程序 因此我使用 webpack 实现了项目配置 项目结构是 node modules public bundle js index html src app jsx index jsx components appBar
  • 如何使用 Typescript 实现带有自定义方法的类似数组的类?

    我想实现一个类似数组的类 接受数组作为构造函数的参数 应该是可迭代的并且具有所有内置数组的方法 有一些自定义方法 应该能够扩展其他类 我是这样看的 class BaseModel arr Array constructor arr Arra
  • Java 7 中的 ComputeIfAbsent 的等效项

    有没有办法仅当密钥不存在时才运行一段代码ConcurrentHashMap 并将代码的结果保存到集合中 我不能使用Java 8功能 因为我正在为 Android 开发 另外 如果不需要的话 我想避免运行长时间的操作 并且我不想破坏集合的原子
  • 中介 R 包 p 值:获得更多有效数字的解决方法?

    我正在运行多项中介分析 需要纠正多重比较 然而 中介包提供的 p 值似乎已四舍五入存储 正如 Roland 关于此问题的非常有用的答案中所观察到的 R中介包 逗号后面的数字 https stackoverflow com questions
  • 使 mp3 可搜索 PHP

    我做了这个PHP脚本 file name sample mp3 header Content Type audio mpeg opts array http gt array method gt GET protocol version g