ホームページ バックエンド開発 PHPチュートリアル PHP 各種 Youku、Tudou、ビデオパッケージングクラス

PHP 各種 Youku、Tudou、ビデオパッケージングクラス

Jul 25, 2016 am 08:49 AM

PHP 各種ビデオ コレクション パッケージ、Youku、Tudou、Tencent Video、56、Sohu Video、Kuliu、Sina Video、LeTV...

Nine Lane jigwang.com
  1. /**
  2. * ビデオ
  3. *
  4. * @package
  5. * @version 1.3
  6. * @copyright 2011 - 2013
  7. *
  8. * 使用法
  9. * require_once "VideoUrlParser.class.php";
  10. * $urls[ ] = "http://v.youku.com/v_show/id_XMjI4MDM4NDc2.html";
  11. * $urls[] = "http://www.tudou.com/playlist/p/l13087099.html";
  12. * $ urls[] = "http://www.tudou.com/programs/view/ufg-A3tlcxk/";
  13. * $urls[] = "http://v.ku6.com/special/show_4926690/Klze2mhMeSK6g05X.html ";
  14. * $urls[] = "http://www.56.com/u68/v_NjI2NTkxMzc.html";
  15. * $urls[] = "http://www.letv.com/ptv/vplay/1168109 .html";
  16. * $urls[] = "http://video.sina.com.cn/v/b/46909166-1290055681.html";
  17. *
  18. * foreach($urls as $url){
  19. * $info = VideoUrlParser::parse($url);
  20. * //var_dump($info);
  21. * echo "<a href='{$info['url']}' target='_new'>{ $info['title']}</a>";
  22. * echo "<br />";
  23. * echo $info['object'];
  24. * echo "<br />";
  25. * }
  26. *
  27. *
  28. *
  29. * //优酷
  30. * http://v.youku.com/v_show/id_XMjU0NjY4OTEy.html
  31. * <embed src="http://player.youku.com/player.php/ sid/XMjU0NjY4OTEy/v.swf"quality="high" width="480" height="400" align="middle"allowScriptAccess="sameDomain" type="application/x-shockwave-flash"></embed> ;
  32. *
  33. * //酷六
  34. * http://v.ku6.com/special/show_3917484/x0BMXAbgZdQS6FqN.html
  35. * <embed src="http://player.ku6.com/refer/x0BMXAbgZdQS6FqN/ v.swf"quality="high" width="480" height="400" align="middle"allowScriptAccess="always"allowfullscreen="true" type="application/x-shockwave-flash"></ embed>
  36. *
  37. * //土豆
  38. * http://www.tudou.com/playlist/p/a65929.html?iid=74905844
  39. * <embed src="http://www.tudou.com/ l/A_0urj-Geec/&iid=74905844/v.swf" type="application/x-shockwave-flash"allowscriptaccess="always" allowedfullscreen="true" wmode="opaque" width="480" height="400" ></embed>
  40. *
  41. * //56
  42. * http://www.56.com/u98/v_NTkyODY2NTU.html
  43. * <embed src="http://player.56.com/v_NTkyODY2NTU .swf" type="application/x-shockwave-flash" width="480" height="405"allowNetworking="all"allowScriptAccess="always"></embed>
  44. *
  45. * //新浪播客
  46. * http://video.sina.com.cn/v/b/46909166-1290055681.html
  47. * <embed src="http://you.video.sina.com.cn/api/sinawebApi/outplayrefer. php/vid=46909166_1290055681_b0K1GHEwDWbK+l1lHz2stqkP7KQNt6nki2O0u1ehIwZYQ0/XM5GdZNQH6SjQBtkEqDhAQJ42dfcn0Rs/s.swf" プラグインページ = "http://www.macromedia.com/go/getf" lashplayer" type="application/x-shockwave-flash" name="ssss"allowFullScreen=" true"allowScriptAccess="always" width="480" height="370"></embed>
  48. *
  49. * //乐视
  50. * http://www.letv.com/ptv/vplay/1168109.html
  51. * <embed src="http://i3.imgs.letv.com/player/swfPlayer.swf?id=1168109&host=app.letv.com&vstatus=1&AP=1&logoMask=0&isShowP2p=0&autoplay=true" 品質=高"scale="NO_SCALE" wmode="opaque" bgcolor="#000000" width="480" height="388" name="FLV_player" align="middle"allowscriptaccess="always" allowedfullscreen="true" type=" application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer">
  52. */
  53. class VideoUrlparser
  54. {
  55. const USER_AGENT = "Mozilla/5.0 (Windows;う; Windows NT 5.1; en-US) AppleWebKit/534.10 (KHTML、Gecko など)
  56. Chrome/8.0.552.224 Safari/534.10";
  57. const CHECK_URL_VALID = "/(youku.com|tudou.com|ku6.com|56.com|letv.com) |video.sina.com.cn|(my.)?tv.sohu.com|v.qq.com)/";
  58. /**
  59. * 解析
  60. *
  61. * @param string $url
  62. * @parammixed $createObject
  63. * @static
  64. * @access public
  65. * @return void
  66. */
  67. static public function parse($url='') , $createObject=true){
  68. $ lowerurl = strto lower($url);
  69. preg_match(self::CHECK_URL_VALID, $ lowerurl, $matches);
  70. if(!$matches) return false;
  71. switch($matches[1 ]){
  72. case 'youku.com':
  73. $data = self::_parseYouku($url);
  74. ブレーク;
  75. case 'tudou.com':
  76. $data = self::_parseTudou($url);
  77. ブレーク;
  78. case 'ku6.com':
  79. $data = self::_parseKu6($url);
  80. ブレーク;
  81. case '56.com':
  82. $data = self::_parse56($url);
  83. ブレーク;
  84. case 'letv.com':
  85. $data = self::_parseLetv($url);
  86. ブレーク;
  87. case 'video.sina.com.cn':
  88. $data = self::_parseSina($url);
  89. ブレーク;
  90. ケース 'my.tv.sohu.com':
  91. ケース 'tv.sohu.com':
  92. ケース 'sohu.com':
  93. $data = self::_parseSohu($url);
  94. ブレーク;
  95. ケース ' v.qq.com':
  96. $data = self::_parseQq($url);
  97. ブレーク;
  98. デフォルト:
  99. $data = false;
  100. }
  101. if($data && $createObject) $data['object' ] = "<embed src="{$data['swf']}"quality="high" width="480" height="400" align="middle"allowNetworking="all"allowScriptAccess="always" タイプ="application/x-shockwave-flash"></embed>";
  102. return $data;
  103. }
  104. /**
  105. * テンセントビデオ
  106. * http://v.qq.com/cover/o/o9tab7nuu0q3esh.html?vid=97abu74o4w3_0
  107. * http://v.qq.com/play/97abu74o4w3.html
  108. * http:// v.qq.com/cover/d/dtdqyd8g7xvoj0o.html
  109. * http://v.qq.com/cover/d/dtdqyd8g7xvoj0o/9SfqULsrtSb.html
  110. * http://imgcache.qq.com/tencentvideo_v1/player/ TencentPlayer.swf?_v=20110829&vid=97abu74o4w3&autoplay=1&list=2&showcfg=1&tpid=23&title=%E7%AC%AC%E4%B8%80%E7%8E%B0%E5%9C%BA&adplay=1&cid=o9tab7nuu0q3esh
  111. */
  112. プライベート静的関数 _parseQq($url){
  113. if(preg_match("//play//", $url)){
  114. $html = self::_fget($url);
  115. preg_match("/url=[^"]+/", $html, $matches);
  116. if(!$matches); return false;
  117. $url = $matches[0];
  118. }
  119. preg_match("/ vid=([^_]+)/", $url, $matches);
  120. $vid = $matches[1];
  121. $html = self::_fget($url);
  122. // query
  123. preg_match(" /flashvarss=s"([^;]+)/s", $html, $matches);
  124. $query = $matches[1];
  125. if(!$vid){
  126. preg_match("/vids?=s ?vids?||s?"(w+)";/i", $html, $matches);
  127. $vid = $matches[1];
  128. }
  129. $query = str_replace('"+vid+"', $ vid, $query);
  130. parse_str($query, $output);
  131. $data['img'] = "http://vpic.video.qq.com/{$$output['cid']}/{ $vid}_1.jpg";
  132. $data['url'] = $url;
  133. $data['title'] = $output['title'];
  134. $data['swf'] = "http:/ /imgcache.qq.com/tencentvideo_v1/player/TencentPlayer.swf?".$query;
  135. return $data;
  136. }
  137. /*
  138. * 优酷网
  139. * http://v.youku.com/v_show/id_XMjI4MDM4NDc2 .html
  140. * http://player.youku.com/player.php/sid/XMjU0NjI2Njg4/v.swf
  141. */
  142. プライベート静的関数 _parseYouku($url){
  143. preg_match("#id_(w+)#", $url, $matches);
  144. if (empty($matches)){
  145. preg_match("#v_playlist/#", $url, $mat);
  146. if(!$mat) return false;
  147. $html = self::_fget($url);
  148. preg_match("#videoId2s*=s*'(w+)'#", $html, $matches);
  149. if(!$matches) return false;
  150. }
  151. $ link = "http://v.youku.com/player/getPlayList/VideoIDS/{$matches[1]}/timezone/+08/version/5/source/out?password=&ran=2513&n=3";
  152. $retval = self::_cget($link);
  153. if ($retval) {
  154. $json = json_decode($retval, true);
  155. $data['img'] = $json['data'][ 0]['ロゴ'];
  156. $data['title'] = $json['data'][0]['title'];
  157. $data['url'] = $url;
  158. $data[' swf'] = "http://player.youku.com/player.php/sid/{$matches[1]}/v.swf";
  159. // echo "<pre>"; var_dump($data);
  160. return $data;
  161. } else {
  162. return false;
  163. }
  164. }
  165. /**
  166. * Tudou.com
  167. * http://www.tudou.com/programs/view/Wtt3FjiDxEE/
  168. * http://www.tudou.com/v/Wtt3FjiDxEE/v.swf
  169. *
  170. * http:// www .tudou.com/playlist/p/a65718.html?iid=74909603
  171. * http://www.tudou.com/l/G5BzgI4lAb8/&iid=74909603/v.swf
  172. */
  173. プライベート静的関数 _parseTudou($url){
  174. preg_match("#view/([-w] +)/#", $url, $matches);
  175. if (empty($matches)) {
  176. if (strpos($url, "/playlist/") == false) return false;
  177. if(strpos ($url, 'iid=') !== false){
  178. $quarr =explode("iid=", $ lowerurl);
  179. if (empty($quarr[1])) return false;
  180. }elseif(preg_match ("#p/l(d+).#", $ lowerurl, $quarr)){
  181. if (empty($quarr[1])) return false;
  182. }
  183. $html = self::_fget($url );
  184. $html = iconv("GB2312", "UTF-8", $html);
  185. preg_match("/lid_codes=slcodes=s['"]([^'"]+)/s", $ html, $matches);
  186. $icode = $matches[1];
  187. preg_match("/iids=s.*?||s(d+)/sx", $html, $matches);
  188. $iid = $一致[1];
  189. preg_match("/listDatas=s([{.*}])/sx", $html, $matches);
  190. $find = array("/n/", '/s/', "/:[^d"]w+[^,]*,/i" , "/({|,)(w+):/");
  191. $replace = array("", "", ':"",', '\1"\2":');
  192. $str = preg_replace($find, $replace, $matches[1]);
  193. //var_dump($str);
  194. $json = json_decode($str);
  195. //var_dump($json);exit;
  196. if(is_array( $json) || is_object($json) && !empty($json)){
  197. foreach ($json as $val) {
  198. if ($val->iid == $iid) {
  199. Break;
  200. }
  201. }
  202. }
  203. $data['img'] = $val->pic;
  204. $data['title'] = $val->title;
  205. $data['url'] = $url;
  206. $ data['swf'] = "http://www.tudou.com/l/{$icode}/&iid={$iid}/v.swf";
  207. return $data;
  208. }
  209. $host = "www.tudou.com";
  210. $path = "/v/{$matches[1]}/v.swf";
  211. $ret = self::_fsget($path, $host);
  212. if ( preg_match("#nLocation: (.*)n#", $ret, $mat)) {
  213. parse_str(parse_url(urldecode($mat[1]), PHP_URL_QUERY));
  214. $data['img'] = $snap_pic;
  215. $data['title'] = $title;
  216. $data['url'] = $url;
  217. $data['swf'] = "http://www.tudou.com/v/{ $matches[1]}/v.swf";
  218. return $data;
  219. }
  220. return false;
  221. }
  222. /**
  223. * Ku6.com
  224. * http://v.ku6.com/film/show_520/3X93vo4tIS7uotHg.html
  225. * http://v.ku6.com/special/show_4926690/Klze2mhMeSK6g05X.html
  226. * http://v .ku6.com/show/7US-kDXjyKyIInDevhpwHg...html
  227. * http://player.ku6.com/refer/3X93vo4tIS7uotHg/v.swf
  228. */
  229. プライベート静的関数 _parseKu6($url){
  230. if(preg_match ("/show_/", $url)){
  231. preg_match("#/([-w]+).html#", $url, $matches);
  232. $url = "http://v.ku6. com/fetchVideo4Player/{$matches[1]}.html";
  233. $html = self::_fget($url);
  234. if ($html) {
  235. $json = json_decode($html, true);
  236. if (!$json) return false;
  237. $data['img'] = $json['data']['picpath'];
  238. $data['title'] = $json['data']['t '];
  239. $data['url'] = $url;
  240. $data['swf'] = "http://player.ku6.com/refer/{$matches[1]}/v.swf";
  241. return $data;
  242. } else {
  243. return false;
  244. }
  245. }elseif(preg_match("/show//", $url, $matches)){
  246. $html = self::_fget($url);
  247. preg_match("/ObjectInfos?=s?([^n]*)};/si", $html, $matches);
  248. $str = $matches[1];
  249. // img
  250. preg_match("/covers ?:s?"([^"]+)"/", $str, $matches);
  251. $data['img'] = $matches[1];
  252. // title
  253. preg_match("/title"? s?:s?"([^"]+)"/", $str, $matches);
  254. $jsstr = "{"title":"{$matches[1]}"}";
  255. $json = json_decode($jsstr, true);
  256. $data['title'] = $json['title'];
  257. // url
  258. $data['url'] = $url;
  259. // query
  260. preg_match("/ "(vid=[^"]+)"sname="flashVars"/s", $html, $matches);
  261. $query = str_replace("&", '&', $matches[1]);
  262. preg_match("///player.ku6cdn.com[^"']+/", $html, $matches);
  263. $data['swf'] = 'http:'.$matches[0].'?' .$query;
  264. return $data;
  265. }
  266. }
  267. /**
  268. * 56.com
  269. * http://www.56.com/u73/v_NTkzMDcwNDY.html
  270. * http://player.56.com/v_NTkzMDcwNDY.swf
  271. */
  272. プライベート静的関数 _parse56($url){
  273. preg_match("#/v_(w+).html#", $ url, $matches);
  274. if (empty($matches)) return false;
  275. $link="http://vxml.56.com/json/{$matches[1]}/?src=out" ;
  276. $retval = self::_cget($link);
  277. if ($retval) {
  278. $json = json_decode($retval, true);
  279. $data['img'] = $json['info' ]['img'];
  280. $data['title'] = $json['info']['Subject'];
  281. $data['url'] = $url;
  282. $data['swf'] = "http://player.56.com/v_{$matches[1]}.swf";
  283. return $data;
  284. } else {
  285. return false;
  286. }
  287. }
  288. /**
  289. * LeTV
  290. * http://www.letv.com/ptv/vplay/1168109.html
  291. * http://www.letv.com/player/x1168109.swf
  292. */
  293. プライベート静的関数 _parseLetv($url){
  294. $html = self::_fget($url);
  295. preg_match("#http://v.t.sina.com.cn/( [^'"]*)#", $html, $matches);
  296. parse_str(parse_url(urldecode($matches[0]), PHP_URL_QUERY));
  297. preg_match("#vplay/(d+)#", $url , $matches);
  298. $data['img'] = $pic;
  299. $data['title'] = $title;
  300. $data['url'] = $url;
  301. $data['swf'] = "http://www.letv.com/player/x{$matches[1]}.swf";
  302. return $data;
  303. }
  304. // 搜狐TV http://my.tv.sohu.com /u/vw/5101536
  305. プライベート静的関数 _parseSohu($url){
  306. $html = self::_fget($url);
  307. $html = iconv("GB2312", "UTF-8", $html);
  308. preg_match_all("/og:(?:title|image|videosrc)"scontent="([^"]+)"/s", $html, $matches);
  309. $data['img'] = $matches[ 1][1];
  310. $data['title'] = $matches[1][0];
  311. $data['url'] = $url;
  312. $data['swf'] = $matches[1] [2];
  313. return $data;
  314. }
  315. /*
  316. * 新浪播客
  317. * http://video.sina.com.cn/v/b/48717043-1290055681.html
  318. * http://you. video.sina.com.cn/api/sinawebApi/outplayrefer.php/vid=48717043_1290055681_PUzkSndrDzXK+l1lHz2stqkP7KQNt6nki2O0u1ehIwZYQ0/XM5GdatoG5ynSA9kEqDhAQJA4dPkm0x4/s.swf
  319. */
  320. プライベート静的関数 _parseSina($url){
  321. preg_match("/(d+)(? :-|_)(d+)/", $url, $matches);
  322. $url = "http://video.sina.com.cn/v/b/{$matches[1]}-{$matches [2]}.html";
  323. $html = self::_fget($url);
  324. preg_match("/videos?:s?([^<]+)}/", $html, $matches);
  325. $find = array("/n/", "/s*/", "/'/", "/{([^:,]+):/", "/,([^:]+) :/", "/:[^d"]w+[^,]*,/i");
  326. $replace = array('', '', '"', '{"\1":', ' ,"\1":', ':"",');
  327. $str = preg_replace($find, $replace, $matches[1]);
  328. $arr = json_decode($str, true);
  329. $ data['img'] = $arr['pic'];
  330. $data['title'] = $arr['title'];
  331. $data['url'] = $url;
  332. $data['swf '] = $arr['swfOutsideUrl'];
  333. return $data;
  334. }
  335. /*
  336. * 通过 file_get_contents 获取内容
  337. */
  338. private static function _fget($url=''){
  339. if(!$ url) return false;
  340. $html = file_get_contents($url);
  341. // 判断はgzip压缩
  342. if($dehtml = self::_gzdecode($html))
  343. return $dehtml;
  344. else
  345. return $html;
  346. }
  347. /*
  348. * fsockopen 経由で内容を取得します
  349. */
  350. private static function _fsget($path='/', $host='', $user_agent=''){
  351. if(!$path || !$host) return false;
  352. $user_agent = $user_agent ? $user_agent : self::USER_AGENT;
  353. $out = <<<HEADER
  354. GET $path HTTP/1.1
  355. ホスト: $host
  356. ユーザーエージェント: $user_agent
  357. 受け入れ: text/html,application/xhtml+ xml,application/xml;q=0.9,*/*;q=0.8
  358. Accept-Language: zh-cn,zh;q=0.5
  359. Accept-Charset: GB2312,utf-8;q=0.7,*;q= 0.7rnrn
  360. HEADER;
  361. $fp = @fsockopen($host, 80, $errno, $errstr, 10);
  362. if (!$fp) return false;
  363. if(!fputs($fp, $out)) return false;
  364. while ( !feof($fp) ) {
  365. $html .= fgets($fp, 1024);
  366. }
  367. fclose($fp);
  368. // 否か判断gzip压缩
  369. if($dehtml = self: :_gzdecode($html))
  370. return $dehtml;
  371. else
  372. return $html;
  373. }
  374. /*
  375. * 通过curl获取内容
  376. */
  377. private static function _cget($url='', $user_agent=' '){
  378. if(!$url) return;
  379. $user_agent = $user_agent ? $user_agent : self::USER_AGENT;
  380. $ch =curl_init();
  381. curl_setopt($ch, CURLOPT_URL, $url);
  382. curl_setopt($ch, CURLOPT_HEADER, 0);
  383. if(strlen($user_agent))curl_setopt ($ch, CURLOPT_USERAGENT, $user_agent);
  384. ob_start();
  385. curl_exec($ch);
  386. $html = ob_get_contents();
  387. ob_end_clean();
  388. if(curl_errno($ch)){
  389. curl_close($ch);
  390. return false;
  391. }
  392. curl_close($ch);
  393. if(!is_string($html) || !strlen( $html)){
  394. return false;
  395. }
  396. return $html;
  397. // 判断はgzip压缩
  398. if($dehtml = self::_gzdecode($html))
  399. return $dehtml;
  400. else
  401. return $html;
  402. }
  403. プライベート静的関数 _gzdecode($data) {
  404. $len = strlen ( $data );
  405. if ($len null を返します。 // GZIP 形式ではありません (RFC 1952 を参照)
  406. }
  407. $method = ord ( substr ( $data, 2, 1 ) ); // 圧縮方法
  408. $flags = ord ( substr ( $data, 3, 1 ) ); // Flags
  409. if ($flags & 31 != $flags) {
  410. // 予約ビットが設定されています -- RFC 1952 では許可されていません
  411. return null;
  412. }
  413. // 注: $mtime は負の値になる可能性があります (PHP 整数の制限) )
  414. $mtime = unpack ( "V", substr ( $data, 4, 4 ) );
  415. $mtime = $mtime [1];
  416. $xfl = substr ( $data, 8, 1 );
  417. $os = substr ( $data, 8, 1 );
  418. $headerlen = 10;
  419. $extralen = 0;
  420. $extra = "";
  421. if ($flags & 4) {
  422. // ヘッダー内の 2 バイト長のプレフィックス付き EXTRA データ
  423. if ($len - $headerlen - 2 return false; // 無効な形式
  424. }
  425. $extralen = unpack ( "v", substr ( $data, 8, 2 ) );
  426. $extralen = $extralen [1];
  427. if ($len - $headerlen - 2 - $extralen < 8) {
  428. false を返します。 // 無効な形式
  429. }
  430. $extra = substr ( $data, 10, $extralen );
  431. $headerlen += 2 + $extralen;
  432. }
  433. $filenamelen = 0;
  434. $filename = "";
  435. if ( $flags & 8) {
  436. // ヘッダー内の C スタイルの文字列ファイル NAME データ
  437. if ($len - $headerlen - 1 < 8) {
  438. return false; // 無効な形式
  439. }
  440. $filenamelen = strpos ( substr ( $data, 8 + $extralen ), chr ( 0 ) );
  441. if ($filenamelen === false || $len - $headerlen - $filenamelen - 1 < 8) {
  442. false を返します。 // 無効な形式
  443. }
  444. $filename = substr ( $data, $headerlen, $filenamelen );
  445. $headerlen += $filenamelen + 1;
  446. }
  447. $commentlen = 0;
  448. $comment = "";
  449. if ($flags & 16) {
  450. // ヘッダー内の C スタイルの文字列 COMMENT データ
  451. if ($len - $headerlen - 1 < 8) {
  452. return false; // 無効な形式
  453. }
  454. $commentlen = strpos ( substr ( $data, 8 + $extralen + $filenamelen ), chr ( 0 ) );
  455. if ($commentlen === false || $len - $headerlen - $コメントレン - 1 false を返します。 // ヘッダー形式が無効です
  456. }
  457. $comment = substr ( $data, $headerlen, $commentlen );
  458. $headerlen += $commentlen + 1;
  459. }
  460. $headercrc = "";
  461. if ($flags & 1 ) {
  462. // ヘッダーに CRC32 の 2 バイト (最下位) が存在します
  463. if ($len - $headerlen - 2 return false; // 無効な形式
  464. }
  465. $calccrc = crc32 ( substr ( $data, 0, $headerlen ) ) & 0xffff;
  466. $headercrc = unpack ( "v", substr ( $data, $headerlen, 2 ) );
  467. $ headercrc = $headercrc [1];
  468. if ($headercrc != $calccrc) {
  469. return false; // 不正なヘッダー CRC
  470. }
  471. $headerlen += 2;
  472. }
  473. // GZIP FOOTER - PHP の制限により、これらは負の値になります
  474. $datacrc = unpack ( "V", substr ( $data, - 8, 4 ) );
  475. $datacrc = $datacrc [1];
  476. $isize = unpack ( "V", substr ( $data, - 4 ) );
  477. $isize = $isize [1];
  478. // 解凍を実行します。
  479. $bodylen = $len - $headerlen - 8;
  480. if ($bodylen // これは決して起こるべきではありません - 実装のバグです。
  481. return null;
  482. }
  483. $body = substr ( $data, $headerlen, $bodylen );
  484. $data = "";
  485. if ($bodylen > 0) {
  486. switch ($method) {
  487. case 8 :
  488. // 現在サポートされている唯一の圧縮方法:
  489. $data = gzinflate ( $body );
  490. Break;
  491. default :
  492. // 不明な圧縮方法
  493. return false;
  494. }
  495. } else {
  496. //...
  497. }
  498. if ($isize != strlen ( $data ) || crc32 ( $data ) != $datacrc) {
  499. // 形式が間違っています! 長さまたは CRC が一致しません。
  500. return false;
  501. }
  502. return $data;
  503. }
  504. }
  505. /*
  506. $url = "http://v.youku.com/v_show/id_XNjIxNjUyOTky.html";
  507. $obj = new VideoUrlparser();
  508. $data = $obj->parse($ url);
  509. var_dump($data);
  510. */
コードをコピー


このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットな記事タグ

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

11ベストPHP URLショートナースクリプト(無料およびプレミアム) 11ベストPHP URLショートナースクリプト(無料およびプレミアム) Mar 03, 2025 am 10:49 AM

11ベストPHP URLショートナースクリプト(無料およびプレミアム)

Laravelでフラッシュセッションデータを使用します Laravelでフラッシュセッションデータを使用します Mar 12, 2025 pm 05:08 PM

Laravelでフラッシュセッションデータを使用します

LaravelのバックエンドでReactアプリを構築する:パート2、React LaravelのバックエンドでReactアプリを構築する:パート2、React Mar 04, 2025 am 09:33 AM

LaravelのバックエンドでReactアプリを構築する:パート2、React

Laravelテストでの簡略化されたHTTP応答のモッキング Laravelテストでの簡略化されたHTTP応答のモッキング Mar 12, 2025 pm 05:09 PM

Laravelテストでの簡略化されたHTTP応答のモッキング

PHPのカール:REST APIでPHPカール拡張機能を使用する方法 PHPのカール:REST APIでPHPカール拡張機能を使用する方法 Mar 14, 2025 am 11:42 AM

PHPのカール:REST APIでPHPカール拡張機能を使用する方法

Codecanyonで12の最高のPHPチャットスクリプト Codecanyonで12の最高のPHPチャットスクリプト Mar 13, 2025 pm 12:08 PM

Codecanyonで12の最高のPHPチャットスクリプト

2025 PHP状況調査の発表 2025 PHP状況調査の発表 Mar 03, 2025 pm 04:20 PM

2025 PHP状況調査の発表

Laravelの通知 Laravelの通知 Mar 04, 2025 am 09:22 AM

Laravelの通知

See all articles