欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

php下載遠(yuǎn)程文件類(支持?jǐn)帱c(diǎn)續(xù)傳)

 更新時(shí)間:2008年11月14日 12:31:51   作者:  
1.功能:支持?jǐn)帱c(diǎn)續(xù)傳的下載,能計(jì)算傳輸率,能控制傳輸率
簡(jiǎn)易使用方法: 
復(fù)制代碼 代碼如下:

$object = new httpdownload();
$object->set_byfile($file)%N#H#%;//服務(wù)器文件名,包括路徑
$object->filename = $filename;//下載另存為的文件名
$object->download();


3.源文件:
復(fù)制代碼 代碼如下:

<?
class httpdownload {
var $data = null;
var $data_len = 0;
var $data_mod = 0;
var $data_type = 0;
var $data_section = 0; //section download
var $sentSize=0;
var $handler = array('auth' => null);
var $use_resume = true;
var $use_autoexit = false;
var $use_auth = false;
var $filename = null;
var $mime = null;
var $bufsize = 2048;
var $seek_start = 0;
var $seek_end = -1;
var $totalsizeref = 0;
var $bandwidth = 0;
var $speed = 0;
function initialize() {
global $HTTP_SERVER_VARS;
if ($this->use_auth) //use authentication
{
if (!$this->_auth()) //no authentication
{
header('WWW-Authenticate: Basic realm="Please enter your username and password"');
header('HTTP/1.0 401 Unauthorized');
header('status: 401 Unauthorized');
if ($this->use_autoexit) exit();
return false;
}
}
if ($this->mime == null) $this->mime = "application/octet-stream"; //default mime
if (isset($_SERVER['HTTP_RANGE']) || isset($HTTP_SERVER_VARS['HTTP_RANGE']))
{
if (isset($HTTP_SERVER_VARS['HTTP_RANGE'])) $seek_range = substr($HTTP_SERVER_VARS['HTTP_RANGE'] , strlen('bytes='));
else $seek_range = substr($_SERVER['HTTP_RANGE'] , strlen('bytes='));
$range = explode('-',$seek_range);
if ($range[0] > 0)
{
$this->seek_start = intval($range[0]);
}
if ($range[1] > 0) $this->seek_end = intval($range[1]);
else $this->seek_end = -1;
if (!$this->use_resume)
{
$this->seek_start = 0;
//header("HTTP/1.0 404 Bad Request");
//header("Status: 400 Bad Request");
//exit;
//return false;
}
else
{
$this->data_section = 1;
}
}
else
{
$this->seek_start = 0;
$this->seek_end = -1;
}
$this->sentSize=0;
return true;
}
function header($size,$seek_start=null,$seek_end=null) {
header('Content-type: ' . $this->mime);
header('Content-Disposition: attachment; filename="' . $this->filename . '"');
header('Last-Modified: ' . date('D, d M Y H:i:s \G\M\T' , $this->data_mod));
if ($this->data_section && $this->use_resume)
{
header("HTTP/1.0 206 Partial Content");
header("Status: 206 Partial Content");
header('Accept-Ranges: bytes');
header("Content-Range: bytes $seek_start-$seek_end/$size");
header("Content-Length: " . ($seek_end - $seek_start + 1));
}
else
{
header("Content-Length: $size");
}
}
function download_ex($size)
{
if (!$this->initialize()) return false;
ignore_user_abort(true);
//Use seek end here
if ($this->seek_start > ($size - 1)) $this->seek_start = 0;
if ($this->seek_end <= 0) $this->seek_end = $size - 1;
$this->header($size,$seek,$this->seek_end);
$this->data_mod = time();
return true;
}
function download() {
if (!$this->initialize()) return false;
try
{
error_log("begin download\n", 3,"/usr/local/www/apache22/LOGS/apache22_php.err");
$seek = $this->seek_start;
$speed = $this->speed;
$bufsize = $this->bufsize;
$packet = 1;
//do some clean up
@ob_end_clean();
$old_status = ignore_user_abort(true);
@set_time_limit(0);
$this->bandwidth = 0;
$size = $this->data_len;
if ($this->data_type == 0) //download from a file
{
$size = filesize($this->data);
if ($seek > ($size - 1)) $seek = 0;
if ($this->filename == null) $this->filename = basename($this->data);
$res = fopen($this->data,'rb');
if ($seek) fseek($res , $seek);
if ($this->seek_end < $seek) $this->seek_end = $size - 1;
$this->header($size,$seek,$this->seek_end); //always use the last seek
$size = $this->seek_end - $seek + 1;
while (!(connection_aborted() || connection_status() == 1) && $size > 0)
{
if ($size < $bufsize)
{
echo fread($res , $size);
$this->bandwidth += $size;
$this->sentSize+=$size;
}
else
{
echo fread($res , $bufsize);
$this->bandwidth += $bufsize;
$this->sentSize+=$bufsize;
}
$size -= $bufsize;
flush();
if ($speed > 0 && ($this->bandwidth > $speed*$packet*1024))
{
sleep(1);
$packet++;
}
}
fclose($res);
}
elseif ($this->data_type == 1) //download from a string
{
if ($seek > ($size - 1)) $seek = 0;
if ($this->seek_end < $seek) $this->seek_end = $this->data_len - 1;
$this->data = substr($this->data , $seek , $this->seek_end - $seek + 1);
if ($this->filename == null) $this->filename = time();
$size = strlen($this->data);
$this->header($this->data_len,$seek,$this->seek_end);
while (!connection_aborted() && $size > 0) {
if ($size < $bufsize)
{
$this->bandwidth += $size;
$this->sentSize+=$size;
}
else
{
$this->bandwidth += $bufsize;
$this->sentSize+=$bufsize;
}
echo substr($this->data , 0 , $bufsize);
$this->data = substr($this->data , $bufsize);
$size -= $bufsize;
flush();
if ($speed > 0 && ($this->bandwidth > $speed*$packet*1024))
{
sleep(1);
$packet++;
}
}
} else if ($this->data_type == 2) {
//just send a redirect header
header('location: ' . $this->data);
}
if($this->totalsizeref==$this->sentSize )error_log("end download\n", 3,"/usr/local/www/apache22/LOGS/apache22_php.err");
else error_log("download is canceled\n", 3,"/usr/local/www/apache22/LOGS/apache22_php.err");
if ($this->use_autoexit) exit();
//restore old status
ignore_user_abort($old_status);
set_time_limit(ini_get("max_execution_time"));
}
catch(Exception $e)
{
error_log("cancel download\n".$e, 3,"/usr/local/www/apache22/LOGS/apache22_php.err");
}
return true;
}
function set_byfile($dir) {
if (is_readable($dir) && is_file($dir)) {
$this->data_len = 0;
$this->data = $dir;
$this->data_type = 0;
$this->data_mod = filemtime($dir);
$this->totalsizeref = filesize($dir);
return true;
} else return false;
}
function set_bydata($data) {
if ($data == '') return false;
$this->data = $data;
$this->data_len = strlen($data);
$this->data_type = 1;
$this->data_mod = time();
return true;
}
function set_byurl($data) {
$this->data = $data;
$this->data_len = 0;
$this->data_type = 2;
return true;
}
function set_lastmodtime($time) {
$time = intval($time);
if ($time <= 0) $time = time();
$this->data_mod = $time;
}
function _auth() {
if (!isset($_SERVER['PHP_AUTH_USER'])) return false;
if (isset($this->handler['auth']) && function_exists($this->handler['auth']))
{
return $this->handler['auth']('auth' , $_SERVER['PHP_AUTH_USER'],$_SERVER['PHP_AUTH_PW']);
}
else return true; //you must use a handler
}
}
?>


相關(guān)文章

  • php隨機(jī)取mysql記錄方法小結(jié)

    php隨機(jī)取mysql記錄方法小結(jié)

    這篇文章主要介紹了php隨機(jī)取mysql記錄方法,實(shí)例分析了幾種常見的隨機(jī)獲取mysql數(shù)據(jù)的方法,是非常實(shí)用的技巧,具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2014-12-12
  • 解析百度搜索結(jié)果link?url=參數(shù)分析 (全)

    解析百度搜索結(jié)果link?url=參數(shù)分析 (全)

    自從9月后百度和360開戰(zhàn)的結(jié)果就是 百度搜索結(jié)果的網(wǎng)址改變了,變成link?url=………這樣的重定向格式了。看到這樣的不友好的URL真有破解的沖動(dòng)。于是今天開始試試破解它
    2012-10-10
  • php生成過去100年下拉列表的方法

    php生成過去100年下拉列表的方法

    這篇文章主要介紹了php生成過去100年下拉列表的方法,涉及php針對(duì)日期格式轉(zhuǎn)換的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-07-07
  • PHP實(shí)現(xiàn)的文件瀏覽器功能簡(jiǎn)單示例

    PHP實(shí)現(xiàn)的文件瀏覽器功能簡(jiǎn)單示例

    這篇文章主要介紹了PHP實(shí)現(xiàn)的文件瀏覽器功能,結(jié)合完整實(shí)例形式分析了php針對(duì)目錄與文件的遍歷、判斷、屬性讀取等相關(guān)操作技巧,需要的朋友可以參考下
    2019-09-09
  • smarty表格換行實(shí)例

    smarty表格換行實(shí)例

    這篇文章主要介紹了smarty表格換行的方法,可實(shí)現(xiàn)針對(duì)表格的靈活操作,需要的朋友可以參考下
    2014-12-12
  • 詳解PHP實(shí)現(xiàn)異步調(diào)用的4種方法

    詳解PHP實(shí)現(xiàn)異步調(diào)用的4種方法

    這篇文章主要為大家詳細(xì)介紹PHP實(shí)現(xiàn)異步調(diào)用的4種方法,感興趣的小伙伴們可以參考一下
    2016-03-03
  • php中截取字符串支持utf-8

    php中截取字符串支持utf-8

    php中截取字符串支持utf-8...
    2007-01-01
  • PHP模塊 Memcached功能多于Memcache

    PHP模塊 Memcached功能多于Memcache

    PHP搭配Memcached已經(jīng)是婦孺皆知的標(biāo)配了。再提似乎讓人覺得太“圡”了,不過有一些細(xì)節(jié)不見得人人都清楚
    2011-06-06
  • 詳解PHP滲透測(cè)試文件包含漏洞與利用

    詳解PHP滲透測(cè)試文件包含漏洞與利用

    這篇文章主要介紹了PHP滲透測(cè)試文件包含漏洞與利用,文件漏洞是一個(gè)非常常見的漏洞,這種類型的漏洞雖然有些難以利用,但一旦利用成功就會(huì)造成非常危險(xiǎn)的后果。本文將詳細(xì)講講PHP反序列化漏洞的原理及示例,感興趣的可以了解一下
    2022-07-07
  • PHP實(shí)現(xiàn)清除wordpress里惡意代碼

    PHP實(shí)現(xiàn)清除wordpress里惡意代碼

    這篇文章主要介紹了PHP實(shí)現(xiàn)清除wordpress里惡意代碼的方法以及相關(guān)代碼和使用方法,有需要的小伙伴可以參考下。
    2015-10-10

最新評(píng)論