思七百科网

专注编程知识分享与游戏经验交流的专业平台

php从远程URL获取(mp4 mp3)音视频的流媒体数据

 /**
     * 从远程URL中获取媒体(如 mp4 mp3)的内容
     * @param mixed $file_url
     * @param mixed $media_type
     * @param mixed $curl_time_out
     * @throws Exception
     * @return mixed
     */
    public static function getRemoteMediaContent($file_url = '', $media_type = "Content-Type: video/mp4", $curl_time_out = 600000)
    {

        if (empty($file_url)) {
            throw new Exception('请传入远程url地址', Response::PARAM_ERROR);
        }

        $parse_bool = parse_url($file_url);
        if ($parse_bool === false) {
            throw new Exception('请传入有效的远程url地址', Response::PARAM_ERROR);
        }

        ini_set('max_execution_time', 0);

        $useragent = "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.96 Safari/537.36";

        //开一个ch  用来获取资源HTTP头信息(主要获取视频长度)
        $ch = curl_init();

        // TRUE 会输出所有的信息,写入到STDERR,或在CURLOPT_STDERR中指定的文件。
        curl_setopt($ch, CURLOPT_VERBOSE, 1);

        //允许 cURL 函数执行的最长秒数
        curl_setopt($ch, CURLOPT_TIMEOUT, $curl_time_out);

        //需要获取的 URL 地址,也可以在curl_init() 初始化会话的时候
        curl_setopt($ch, CURLOPT_URL, $file_url);

        //TRUE 时将会根据服务器返回 HTTP 头中的 "Location: " 重定向。
        //(注意:这是递归的,"Location: " 发送几次就重定向几次,除非设置了 CURLOPT_MAXREDIRS,限制最大重定向次数。)。
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

        // 启用时会将头文件的信息作为数据流输出(注意这里第一步只需要获取资源HTTP头信息 主要是为了得到内容的长度)
        curl_setopt($ch, CURLOPT_HEADER, true);

        // TRUE 强制获取一个新的连接,而不是缓存中的连接
        curl_setopt($ch, CURLOPT_FRESH_CONNECT, true);

        // FALSE 禁止 cURL 验证对等证书(peer'scertificate)。要验证的交换证书可以在 CURLOPT_CAINFO 选项中设置,或在 CURLOPT_CAPATH中设置证书目录
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);

        //向服务器发送,包含了访问者系统引擎版本、浏览器信息的字段信息。
        //一般服务器识别出是爬虫请求,会拒绝访问。所以此时设置User-Agent,可以将爬虫伪装成用户通过浏览器访问。
        curl_setopt($ch, CURLOPT_USERAGENT, $useragent);

        // TRUE 时将不输出 BODY 部分。同时 Mehtod 变成了 HEAD。修改为 FALSE 时不会变成 GET
        curl_setopt($ch, CURLOPT_NOBODY, true);

        //TRUE 将curl_exec()获取的信息以字符串返回,而不是直接输出
        //这里我们不需要关心
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

        //执行 cURL 会话  这里我们只关心头信息  所以不需要获取返回的内容
        curl_exec($ch);

        //获取一个cURL连接资源句柄的信息  这里主要用来读取长度
        //-- CURLINFO_CONTENT_LENGTH_DOWNLOAD   从Content-Length: field中读取的下载内容长度
        $filesize = $length = curl_getinfo($ch, CURLINFO_CONTENT_LENGTH_DOWNLOAD);

        //发送请求的媒体头类型
        header($media_type);

        //------ 获取资源长度告一段落  以下用于获取媒体视频的二进制内容------

        //总共接收的数据大小
        header("Content-length: " . $filesize);

        //接收的数据类型是 字节类型 即二进制
        header('Accept-Ranges: bytes');

        $partialContent = false;
        $offset = 0; //读取数据的初始位置

        if (isset($_SERVER['HTTP_RANGE'])) {

            $partialContent = true;

            //获得初始位置和数据长度
            preg_match('/bytes=(\d+)-(\d+)?/', $_SERVER['HTTP_RANGE'], $matches);
            $offset = intval($matches[1]);
            $length = $filesize - $offset - 1;

            /***
            断点续传: 就是从文件上次中断的地方开始重新下载或上传,当下载或上传文件的时候,如果没有实现断点续传功能,那么每次出现异常或者用户主动的暂停,都会去重头下载,
            这样很浪费时间。所以断点续传的功能就应运而生了。要实现断点续传的功能,需要客户端记录下当前的下载或上传进度,
            并在需要续传的时候通知服务端本次需要下载或上传的内容片段。
            HTTP的请求上定义了断点续传相关的HTTP头Range字段和Content-Range字段。
            比如说客户端在Header中设置Range=bytes22223333- 表示文件从22223333字节开始传,前面的字节不用传了。
            服务器收到请求,返回206 Partial Content。 Content-Length=44445555,Content-Range=bytes22223333-44445554/44445555

             */
            //Chrome在对于MP3文件的访问,返回的都是206 Partial Content
            header('HTTP/1.1 206 Partial Content');

            //每次接收数据的的范围
            header('Content-Range: bytes ' . $offset . '-' . ($offset + $length) . '/' . $filesize);
        }

        //重新开一个ch  用来获取内容
        $ch = curl_init();

        //如果支持分段发送数据
        if ($partialContent && isset($_SERVER['HTTP_RANGE'])) {

            //获取上次的范围
            preg_match('/bytes=(\d+)-(\d+)?/', $_SERVER['HTTP_RANGE'], $matches);

            $offset = intval($matches[1]); //开始位置
            $length = $filesize - $offset - 1; //获取长度

            //发送带有Range的请求头
            $headers = ['Range: bytes=' . $offset . '-' . ($offset + $length) . ''];
            curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
        }

        curl_setopt($ch, CURLOPT_VERBOSE, 1);

        curl_setopt($ch, CURLOPT_TIMEOUT, $curl_time_out);

        curl_setopt($ch, CURLOPT_URL, $file_url);

        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

        // 启用时会将头文件的信息作为数据流输出(这里只需要获取内容 所以设置为false)
        curl_setopt($ch, CURLOPT_HEADER, false);

        curl_setopt($ch, CURLOPT_FRESH_CONNECT, true);

        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);

        curl_setopt($ch, CURLOPT_USERAGENT, $useragent);

        // TRUE 时将不输出 BODY 部分。同时 Mehtod 变成了 HEAD。修改为 FALSE 时不会变成 GET  [ 这里我们不需要输出头信息]
        curl_setopt($ch, CURLOPT_NOBODY, false);

        // TRUE 将curl_exec()获取的信息以字符串返回,而不是直接输出
        //这里我们需要直接输出二进制数据
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, false);

        //执行 cURL 会话
        curl_exec($ch);
    }

PHP中的九大缓存技术(php的缓存技术php技术优势)

1、全页面静态化缓存也就是将页面全部生成html静态页面,用户访问时直接访问的静态页面,而不会去走php服务器解析的流程。此种方式,在CMS系统中比较常见,比如dedecms;

一种比较常用的实现方式是用输出缓存:

2、页面部分缓存该种方式,是将一个页面中不经常变的部分进行静态缓存,而经常变化的块不缓存,最后组装在一起显示;可以使用类似于ob_get_contents的方式实现,也可以利用类似ESI之类的页面片段缓存策略,使其用来做动态页面中相对静态的片段部分的缓存(ESI技术,请baidu,此处不详讲)。

在线上传解压PHP文件代码,压缩/压缩(网站一键打包)支持密码登录

在线上传解压PHP文件代码,压缩/压缩(网站一键打包)支持密码登录

资源宝分享:www.httple.net

如果你没有主机控制面板这个是最好选择,不需要数据库,上传当控制面板使用,无需安装任何扩展,安全高,需要账号密码登录

用php生成HTML文件的类(php生成html网页)

目的

用PHP生成HTML文档, 支持标签嵌套缩进, 支持标签自定义属性

起因

这个东西确实也是心血来潮写的, 本来打算是输出HTML片段用的, 但后来就干脆写成了一个可以输出完整HTML的功能;

我很满意里边的实现缩进的机制, 大家有用到的可以看看

p.s. 现在都是真正的前后端分离了(vue, nodejs, webpack...), 这个东西喜欢就用, 不喜欢就算了~

PHP8函数包含文件-PHP8知识详解(php函数中 包含文件)

在php中,可以使用以下函数来包含其他文件:include()、include_once()、require()、require_once()。

腾讯视频下载视频转为mp4格式的教程

腾讯视频下载视频转为mp4格式的教程

1、打开腾讯视频客户端,找到需要转换的视频文件,单击右键选择【打开方式】—【Windows Media Player】。

Php JIT 使用详解(php基础)

简介

PHP 8 引入的

php宝塔搭建实战wordpress英文国外资讯整站php源码

大家好啊,欢迎来到web测评。本期给大家带来一套php开发的国外财经资讯商业新闻整站php源码,具有全自动采集发布广告联盟网站的特性,是wordpress二次开发的。上次是谁要的系统项目啊,帮你找到了,还说不会搭建,让我帮忙录制一期教程,趁着今天有空,简单的录制测试了一下,部署方式还是很容易的。感兴趣的朋友可以自行下载学习。

php.ini配置文件的语法及其使用(php.ini文件在哪)

关于php.ini

这个文件必须命名为'php.ini'并放置在httpd.conf中的PHPIniDir指令指定的目录中。

空白字符和以分号开始的行被简单地忽略。

章节标题(例如: [php])也被简单地忽略, 即使将来它们可能有某种意义。

PHP如何上传文件(php文件上传用什么请求方法)

文件上传是网站开发中常见的功能之一,它可以使用户轻松上传图片、音频、视频等文件。在PHP中,实现文件上传也非常简单。下面为大家介绍具体的步骤,让你的网站功能更加强大。

步骤一:创建文件上传表单

首先,我们需要在HTML中创建一个文件上传的表单,用于让用户选择要上传的文件。具体的HTML代码如下:

在表单中我们使用了标签来创建一个文件选择框,用户可以通过点击按钮选择要上传的文件。

<< < 4 5 6 7 8 9 10 11 12 13 > >>
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言