PHP 获取视频时长方法
因为最近做http://www.sdfymj.com/video/ 这个视频站点,需要用到获取视频时长的方法,今天顺便分享给大家
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | //获得视频文件的总长度时间和创建时间 根据视频长度判断是否失效 public function getTime( $url ) { //获取视频重定向后的链接 $location = locationUrl( $url ); //获取视频Content-Length $responseHead = get_data( $location ); $list1 = explode ( "Content-Length: " , $responseHead ); $list2 = explode ( "Connection" , $list1 [1]); $list = explode ( "x" , $list2 [0]); return $list [0]; } //获取视频重定向后的链接 function locationUrl( $url ){ $url_parts = @ parse_url ( $url ); if (! $url_parts ) return false; if (!isset( $url_parts [ 'host' ])) return false; if (!isset( $url_parts [ 'path' ])) $url_parts [ 'path' ] = '/' ; $sock = fsockopen ( $url_parts [ 'host' ], (isset( $url_parts [ 'port' ]) ? (int) $url_parts [ 'port' ] : '80' ), $errno , $errstr , 30); if (! $sock ) return false; $request = "HEAD " . $url_parts [ 'path' ] . (isset( $url_parts [ 'query' ]) ? '?' . $url_parts [ 'query' ] : '' ) . " HTTP/1.1\r\n" ; $request .= 'Host: ' . $url_parts [ 'host' ] . "\r\n" ; $request .= "Connection: Close\r\n\r\n" ; fwrite( $sock , $request ); $response = '' ; while (! feof ( $sock )) { $response .= fread ( $sock , 8192); } fclose( $sock ); if (preg_match( '/^Location: (.+?)$/m' , $response , $matches )){ if ( substr ( $matches [1], 0, 1) == "/" ){ return $url_parts [ 'scheme' ] . "://" . $url_parts [ 'host' ] . trim( $matches [1]); } else { return trim( $matches [1]); } } else { return false; } } //审核视频 curl function get_data( $url ){ $oCurl = curl_init(); //模拟浏览器 $header [] = "deo.com" ; $user_agent = "Mozilla/4.0 (Linux; Andro 6.0; Nexus 5 Build) AppleWeb/537.36 (KHTML, like Gecko)" ; curl_setopt( $oCurl , CURLOPT_URL, $url ); curl_setopt( $oCurl , CURLOPT_HTTPHEADER, $header ); curl_setopt( $oCurl , CURLOPT_HEADER, true); curl_setopt( $oCurl , CURLOPT_NOBODY, true); curl_setopt( $oCurl , CURLOPT_USERAGENT, $user_agent ); curl_setopt( $oCurl , CURLOPT_RETURNTRANSFER, 1 ); // 不用 POST 方式请求, 意思就是通过 GET 请求 curl_setopt( $oCurl , CURLOPT_POST, false); $sContent = curl_exec( $oCurl ); // 获得响应结果里的:头大小 $headerSize = curl_getinfo( $oCurl , CURLINFO_HEADER_SIZE); // 根据头大小去获取头信息内容 $header = substr ( $sContent , 0, $headerSize ); curl_close( $oCurl ); return $header ; } |
千行代码,Bug何处藏。 纵使上线又怎样,朝令改,夕断肠。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 解答了困扰我五年的技术问题
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 用 C# 插值字符串处理器写一个 sscanf
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· DeepSeek 解答了困扰我五年的技术问题。时代确实变了!
· PPT革命!DeepSeek+Kimi=N小时工作5分钟完成?
· What?废柴, 还在本地部署DeepSeek吗?Are you kidding?
· 赶AI大潮:在VSCode中使用DeepSeek及近百种模型的极简方法
· DeepSeek企业级部署实战指南:从服务器选型到Dify私有化落地
2018-08-07 织梦CMS5.7主动推送二次开发
2018-08-07 destoon二次开发-用户名、邮箱、手机账号中间字符串以*隐藏 扩展
2018-08-07 destoon二次开发-签到时间函数扩展
2018-08-07 dt二次开发之-url伪静态的自定义