亚洲免费不卡_在线视频精品_国产尤物精品_久久久久网址_久久精品91_欧美va天堂在线_狠狠入ady亚洲精品_亚洲午夜精品福利_国产精品草草_午夜精品久久99蜜桃的功能介绍

php支持斷點續傳、分塊下載的類
來源:易賢網 閱讀:1379 次 日期:2016-08-25 15:20:29
溫馨提示:易賢網小編為您整理了“php支持斷點續傳、分塊下載的類”,方便廣大網友查閱!

本文是為大家分享php支持斷點續傳、分塊下載的類,供大家參考,具體內容如下

<?php

/**

 * User: djunny

 * Date: 2016-04-29

 * Time: 17:18

 * Mail: 199962760@qq.com

 * 支持斷點下載的類

 */

class downloader {

  /**

   * download file to local path

   *

   * @param    $url

   * @param    $save_file

   * @param int  $speed

   * @param array $headers

   * @param int  $timeout

   * @return bool

   * @throws Exception

   */

  static function get($url, $save_file, $speed = 10240, $headers = array(), $timeout = 10) {

    $url_info = self::parse_url($url);

    if (!$url_info['host']) {

      throw new Exception('Url is Invalid');

    }

    // default header

    $def_headers = array(

      'Accept'     => '*/*',

      'User-Agent'   => 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)',

      'Accept-Encoding' => 'gzip, deflate',

      'Host'      => $url_info['host'],

      'Connection'   => 'Close',

      'Accept-Language' => 'zh-cn',

    );

    // merge heade

    $headers = array_merge($def_headers, $headers);

    // get content length

    $content_length = self::get_content_size($url_info['host'], $url_info['port'], $url_info['request'], $headers, $timeout);

    // content length not exist

    if (!$content_length) {

      throw new Exception('Content-Length is Not Exists');

    }

    // get exists length

    $exists_length = is_file($save_file) ? filesize($save_file) : 0;

    // get tmp data file

    $data_file = $save_file . '.data';

    // get tmp data

    $exists_data = is_file($data_file) ? json_decode(file_get_contents($data_file), 1) : array();

    // check file is valid

    if ($exists_length == $content_length) {

      $exists_data && @unlink($data_file);

      return true;

    }

    // check file is expire

    if ($exists_data['length'] != $content_length || $exists_length > $content_length) {

      $exists_data = array(

        'length' => $content_length,

      );

    }

    // write exists data

    file_put_contents($data_file, json_encode($exists_data));

    try {

      $download_status = self::download_content($url_info['host'], $url_info['port'], $url_info['request'], $save_file, $content_length, $exists_length, $speed, $headers, $timeout);

      if ($download_status) {

        @unlink($data_file);

      }

    } catch (Exception $e) {

      throw new Exception($e->getMessage());

    }

    return true;

  }

  /**

   * parse url

   *

   * @param $url

   * @return bool|mixed

   */

  static function parse_url($url) {

    $url_info = parse_url($url);

    if (!$url_info['host']) {

      return false;

    }

    $url_info['port']  = $url_info['port'] ? $url_info['host'] : 80;

    $url_info['request'] = $url_info['path'] . ($url_info['query'] ? '?' . $url_info['query'] : '');

    return $url_info;

  }

  /**

   * download content by chunk

   *

   * @param $host

   * @param $port

   * @param $url_path

   * @param $headers

   * @param $timeout

   */

  static function download_content($host, $port, $url_path, $save_file, $content_length, $range_start, $speed, &$headers, $timeout) {

    $request = self::build_header('GET', $url_path, $headers, $range_start);

    $fsocket = @fsockopen($host, $port, $errno, $errstr, $timeout);

    stream_set_blocking($fsocket, TRUE);

    stream_set_timeout($fsocket, $timeout);

    fwrite($fsocket, $request);

    $status = stream_get_meta_data($fsocket);

    if ($status['timed_out']) {

      throw new Exception('Socket Connect Timeout');

    }

    $is_header_end = 0;

    $total_size  = $range_start;

    $file_fp    = fopen($save_file, 'a+');

    while (!feof($fsocket)) {

      if (!$is_header_end) {

        $line = @fgets($fsocket);

        if (in_array($line, array("\n", "\r\n"))) {

          $is_header_end = 1;

        }

        continue;

      }

      $resp    = fread($fsocket, $speed);

      $read_length = strlen($resp);

      if ($resp === false || $content_length < $total_size + $read_length) {

        fclose($fsocket);

        fclose($file_fp);

        throw new Exception('Socket I/O Error Or File Was Changed');

      }

      $total_size += $read_length;

      fputs($file_fp, $resp);

      // check file end

      if ($content_length == $total_size) {

        break;

      }

      sleep(1);

      // for test

      //break;

    }

    fclose($fsocket);

    fclose($file_fp);

    return true;

  }

  /**

   * get content length

   *

   * @param $host

   * @param $port

   * @param $url_path

   * @param $headers

   * @param $timeout

   * @return int

   */

  static function get_content_size($host, $port, $url_path, &$headers, $timeout) {

    $request = self::build_header('HEAD', $url_path, $headers);

    $fsocket = @fsockopen($host, $port, $errno, $errstr, $timeout);

    stream_set_blocking($fsocket, TRUE);

    stream_set_timeout($fsocket, $timeout);

    fwrite($fsocket, $request);

    $status = stream_get_meta_data($fsocket);

    $length = 0;

    if ($status['timed_out']) {

      return 0;

    }

    while (!feof($fsocket)) {

      $line = @fgets($fsocket);

      if (in_array($line, array("\n", "\r\n"))) {

        break;

      }

      $line = strtolower($line);

      // get location

      if (substr($line, 0, 9) == 'location:') {

        $location = trim(substr($line, 9));

        $url_info = self::parse_url($location);

        if (!$url_info['host']) {

          return 0;

        }

        fclose($fsocket);

        return self::get_content_size($url_info['host'], $url_info['port'], $url_info['request'], $headers, $timeout);

      }

      // get content length

      if (strpos($line, 'content-length:') !== false) {

        list(, $length) = explode('content-length:', $line);

        $length = (int)trim($length);

      }

    }

    fclose($fsocket);

    return $length;

  }

  /**

   * build header for socket

   *

   * @param   $action

   * @param   $url_path

   * @param   $headers

   * @param int $range_start

   * @return string

   */

  static function build_header($action, $url_path, &$headers, $range_start = -1) {

    $out = $action . " {$url_path} HTTP/1.0\r\n";

    foreach ($headers as $hkey => $hval) {

      $out .= $hkey . ': ' . $hval . "\r\n";

    }

    if ($range_start > -1) {

      $out .= "Accept-Ranges: bytes\r\n";

      $out .= "Range: bytes={$range_start}-\r\n";

    }

    $out .= "\r\n";

    return $out;

  }

}

#use age

/*

try {

  if (downloader::get('http://dzs.aqtxt.com/files/11/23636/201604230358308081.rar', 'test.rar')) {

    //todo

    echo 'Download Succ';

  }

} catch (Exception $e) {

  echo 'Download Failed';

}

*/

?>

以上就是本文的全部內容,希望對大家的學習有所幫助。

更多信息請查看網絡編程
易賢網手機網站地址:php支持斷點續傳、分塊下載的類
由于各方面情況的不斷調整與變化,易賢網提供的所有考試信息和咨詢回復僅供參考,敬請考生以權威部門公布的正式信息和咨詢為準!
關于我們 | 聯系我們 | 人才招聘 | 網站聲明 | 網站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點

版權所有:易賢網

亚洲免费不卡_在线视频精品_国产尤物精品_久久久久网址_久久精品91_欧美va天堂在线_狠狠入ady亚洲精品_亚洲午夜精品福利_国产精品草草_午夜精品久久99蜜桃的功能介绍
欧美成人综合| 国内精品**久久毛片app| 久久精品一区二区国产| 性伦欧美刺激片在线观看| 久久久99国产精品免费| 国产精品分类| 99爱精品视频| 久久裸体视频| 亚洲毛片网站| 欧美福利一区| 中文国产一区| 国产精品啊v在线| 国产精品一区毛片| 欧美日韩一区二区视频在线| 亚洲国产精品久久久久久女王| 99精品热6080yy久久| 亚洲一区二区免费看| 欧美ab在线视频| 亚洲第一黄色| 老司机精品久久| 999在线观看精品免费不卡网站| 欧美中文字幕| 亚洲精品无人区| 欧美啪啪一区| 久久久精品性| 亚洲欧美日本国产专区一区| 亚洲手机在线| 午夜久久黄色| 久热精品视频| 欧美一进一出视频| 99国产精品自拍| 欧美亚洲不卡| 麻豆九一精品爱看视频在线观看免费| 亚洲天堂偷拍| 欧美日韩国产免费观看| 免费欧美日韩| 一区二区三区四区五区精品| 亚洲天堂久久| 午夜久久久久| 久久久噜噜噜久久狠狠50岁| 国产精品亚洲综合| 日韩亚洲国产欧美| 日韩视频精品在线观看| 在线精品亚洲| 亚洲精品一区二区三区樱花| 一区久久精品| 91久久精品一区二区别| 亚洲高清资源综合久久精品| 激情久久中文字幕| 亚洲啪啪91| 一本久道久久综合狠狠爱| 亚洲精品九九| 国产精品手机在线| 免费亚洲婷婷| 欧美国产高潮xxxx1819| 欧美日韩精品不卡| 伊人成人网在线看| 在线亚洲国产精品网站| 国产精品毛片va一区二区三区| 亚洲毛片播放| 亚洲一区二区毛片| 久久亚洲国产精品日日av夜夜| 久久久久久久波多野高潮日日| 午夜视频一区| 亚洲黄页一区| 新狼窝色av性久久久久久| 蜜桃av久久久亚洲精品| 久热综合在线亚洲精品| 国产在线一区二区三区四区| 1024日韩| 噜噜噜躁狠狠躁狠狠精品视频| 久久综合福利| 亚洲高清不卡一区| 在线一区欧美| 女主播福利一区| 亚洲高清在线| 国产伦精品一区二区三区视频黑人 | 国内精品久久国产| 99精品免费视频| 美女精品一区| 亚洲国产精品久久久久久女王| 99pao成人国产永久免费视频| 国产日韩欧美三级| 欧美日韩1080p| 国产亚洲午夜| 国产综合色产| 午夜亚洲激情| 影音先锋日韩资源| 午夜宅男久久久| 亚洲成色最大综合在线| 欧美一区91| 亚洲在线电影| 一区二区三区国产盗摄| 黄色成人在线网站| 久久久久久久久久久一区| 亚洲毛片在线| 伊人精品在线| 国产精品国色综合久久| 美女精品网站| 免费视频一区| 国产精品普通话对白| 激情久久久久久久| 欧美少妇一区| 欧美日韩网站| 久久精品五月| 麻豆精品网站| 久久精品导航| 久久精品人人做人人爽电影蜜月| 99精品国产福利在线观看免费| 黄色亚洲大片免费在线观看| 国产一区二区三区四区hd| 欧美一区二区三区四区在线观看地址| 亚洲一区亚洲| 久久成人国产| 久久中文欧美| 欧美日韩网站| 狠狠色噜噜狠狠色综合久| 欧美日韩三区四区| 影音先锋在线一区| 夜夜嗨一区二区| 亚洲深爱激情| 免费视频一区二区三区在线观看| 亚洲欧美日产图| 久久久久久穴| 欧美日韩三级| 精品999日本| 99日韩精品| 亚洲一区三区视频在线观看| 免费看黄裸体一级大秀欧美| 久久福利毛片| 欧美日韩亚洲免费| 亚洲日产国产精品| 免费h精品视频在线播放| 久久另类ts人妖一区二区| 欧美全黄视频| 99www免费人成精品| 免费视频一区| 国产精品国产亚洲精品看不卡15| 最新成人av网站| 久久精品男女| 激情偷拍久久| 亚洲一区二区毛片| 国产精品s色| 国产日韩欧美二区| 欧美国产先锋| 国产亚洲一级| 国产精品第十页| 亚洲一区二区三区欧美| 欧美视频导航| 久久www成人_看片免费不卡| 好看的日韩av电影| 免费日韩av片| 99国产精品私拍| 欧美日韩成人一区二区三区| 中文精品视频| 好看不卡的中文字幕| 久久不射中文字幕| 999在线观看精品免费不卡网站| 久久久久国产一区二区| 中文精品一区二区三区| 国产一区二区中文| 久久久99国产精品免费| 国产欧美一区二区色老头| 欧美三级在线| 午夜视频久久久| 国产精品一区二区三区四区五区| 国语自产精品视频在线看8查询8| 亚洲综合欧美| 亚洲欧洲一区二区天堂久久| 欧美激情一级片一区二区| 国产精品夜夜夜一区二区三区尤| 激情亚洲成人| 黄色亚洲免费| 亚洲视频高清| 伊甸园精品99久久久久久| 欧美精品一区三区在线观看| 噜噜爱69成人精品| 亚洲欧美日韩国产一区二区| 中日韩视频在线观看| 亚洲人成高清| 亚洲毛片av| 国产日韩精品一区观看| 99在线|亚洲一区二区| 亚洲精品日韩精品| 99精品国产高清一区二区| 亚洲国产综合在线看不卡| 一区免费视频| 亚洲另类黄色| 国产精品日韩久久久| 亚洲经典视频在线观看| 99成人精品| 亚洲永久字幕| 久久久夜夜夜| 国产在线日韩| 亚洲激情专区| 蘑菇福利视频一区播放| 老司机精品导航| 欧美日韩综合久久| 亚洲高清久久| 国产色综合网| 久久综合狠狠综合久久综青草| 女女同性女同一区二区三区91 | 亚洲欧美日韩在线观看a三区| 国产亚洲成人一区| 午夜亚洲视频| 午夜精品视频| 91久久极品少妇xxxxⅹ软件| 国产亚洲精品v| 欧美一区激情| 亚洲激情专区| 久久午夜av| 国内精品美女在线观看| 在线综合欧美| 午夜精品久久99蜜桃的功能介绍| 亚洲无线视频| 国产乱码精品一区二区三区不卡| 久久亚洲一区二区| 在线不卡视频| 久久久噜噜噜久久狠狠50岁| 黄色av成人| 久久精品男女| 亚洲啪啪91| 久久一二三四| 国产日韩综合| 狠狠色综合一区二区| 午夜亚洲福利在线老司机| 国内精品国语自产拍在线观看| 国产精品久久久一区二区| 欧美国产高潮xxxx1819| 99精品国产99久久久久久福利| 久久久久久久久久码影片| 影音国产精品| 欧美 日韩 国产一区二区在线视频| 亚洲成色最大综合在线| 久久精品一本| 亚洲最新在线| 亚洲国产日韩欧美| 欧美久久电影| 美女精品网站| 亚洲一区欧美二区| 亚洲免费黄色| 伊人久久成人| 国产精品www994| 欧美成人免费在线| 久久精品国产99精品国产亚洲性色| 亚洲国产精品一区在线观看不卡| 久久中文在线| 性8sex亚洲区入口| 国产精品日韩久久久| 亚洲美女一区| 亚洲精品在线视频观看| 极品av少妇一区二区| 欧美午夜在线| 欧美私人啪啪vps| 欧美激情一区| 亚洲欧美一级二级三级| 久久精品女人天堂| 麻豆成人精品| 久久精品国语| 久久亚洲图片| 欧美va天堂| 欧美日韩精品免费看| 欧美激情性爽国产精品17p| 久久久综合香蕉尹人综合网| 久久精品一区二区三区中文字幕| 亚洲一区三区电影在线观看| 国产精品资源| 久久经典综合| 欧美日韩一区二区三区在线观看免| 欧美 日韩 国产 一区| 欧美尤物一区| 欧美黄色aaaa| 国产一区自拍视频| 在线国产精品一区| 日韩一区二区久久| 免费在线一区二区| 欧美国产三级| 亚洲黄色免费| 国产精品日韩高清| 久久亚洲一区| 国产真实久久| 99热精品在线观看| 午夜一区不卡| 国产精品成人一区二区网站软件| 激情欧美一区| 亚洲综合社区| 欧美久久在线| 亚洲毛片在线| 久久精品二区| 亚洲一级影院| 香蕉av777xxx色综合一区| 玖玖国产精品视频| 亚洲精品专区| 久久久久久亚洲精品不卡4k岛国| 国产精品a久久久久| 一本色道久久精品| 欧美激情第六页| 国产欧美一区二区色老头 | 老司机午夜免费精品视频| 狠狠色狠狠色综合日日tαg| 在线一区亚洲| 国产精品sss| 国产日韩精品久久| 欧美另类女人| 国产精品推荐精品| 亚洲视频福利| 久久久久久久久久久一区| 亚洲第一黄网| 欧美69视频| 亚洲免费影院| 亚洲国产免费看| 欧美女人交a| 老鸭窝毛片一区二区三区| 亚洲欧洲一二三| 国产一区自拍视频| 麻豆成人在线| 中文精品在线| 亚洲国产高清视频| 欧美日韩国产一区精品一区| 亚洲免费在线| 国产欧美午夜| 妖精视频成人观看www| 精品1区2区3区4区| 欧美日韩一区二区三区在线观看免| 一本一本久久a久久精品综合妖精| 欧美日韩一区综合| 欧美在线三级| 久久久蜜桃一区二区人| 国产日韩欧美一区| 亚洲第一黄网| 伊人久久大香线蕉av超碰演员| 午夜精品婷婷| 欧美激情第10页| 久久亚洲国产精品一区二区| 午夜在线视频观看日韩17c| 99亚洲一区二区| 99亚洲一区二区| 亚洲久色影视| 一区二区三区四区五区精品视频| 一区久久精品| 亚洲国产一区二区三区高清| 在线成人www免费观看视频| 狠狠入ady亚洲精品| 欧美特黄一级| 极品av少妇一区二区| 亚洲一二区在线| 亚洲区国产区| 国产亚洲欧美一区二区| 国产精品日本| 男女av一区三区二区色多| 久久福利一区| 欧美一区2区三区4区公司二百| 欧美一区二区三区在线播放| 亚洲欧美综合一区| 欧美日韩亚洲一区三区| 精品成人久久| 中日韩在线视频| 久久精品欧美| 国产一区日韩欧美| 99在线精品视频在线观看| 中文在线一区| 久久综合福利| 亚洲电影在线| 性色一区二区| 国产一区二区中文字幕免费看| 亚洲激情午夜| 久久久久99| 99热这里只有精品8| 久久一区二区三区四区五区 | 欧美一区视频| 在线看片欧美| 另类天堂av| 亚洲九九精品| 欧美精品观看| 国产伦精品一区二区三区视频黑人 | 国产精品永久| 欧美理论在线| 国产欧美日韩一区| 欧美激情日韩| 亚洲色图自拍| 国产精品theporn| 亚洲欧美久久久| 亚洲图色在线| 欧美一区国产一区| 亚洲九九精品| 好吊视频一区二区三区四区| 国产一区二区三区奇米久涩| 午夜精品剧场| 免费视频一区| 夜夜嗨av一区二区三区网站四季av| 巨乳诱惑日韩免费av| 国产日韩1区| 亚洲天堂久久| 欧美黄色免费| 免费看亚洲片| 国产日韩一区| 亚洲国产精品一区二区第一页 | 久久aⅴ国产紧身牛仔裤| 伊人影院久久| 欧美日韩免费观看一区=区三区|