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

PHP下載遠(yuǎn)程圖片并保存到本地方法總結(jié)

 更新時間:2016年01月22日 09:17:04   作者:simonjay2007  
這篇文章主要介紹了PHP下載遠(yuǎn)程圖片并保存到本地方法總結(jié)的相關(guān)資料,需要的朋友可以參考下

1.獲取遠(yuǎn)程文件大小及信息的函數(shù)

function getFileSize($url){ 
$url = parse_url($url); 
if($fp = @fsockopen($url['host'],empty($url['port'])?80:$url['port'],$error)){ 
fputs($fp,"GET ".(empty($url['path'])?'/':$url['path'])." HTTP/1.1\r\n"); 
fputs($fp,"Host:$url[host]\r\n\r\n"); 
while(!feof($fp)){ 
$tmp = fgets($fp); 
if(trim($tmp) == ''){ 
break; 
}else if(preg_match('/Content-Length:(.*)/si',$tmp,$arr)){ 
return trim($arr[1]); 
} 
} 
return null; 
}else{ 
return null; 
} 
} 
echo getFileSize(http://www.dianpub.com/download/xml.rar)

2.圖片

//記錄程序開始的時間
$BeginTime=getmicrotime();
function GrabImage($url,$filename="") { 
if($url==""):return false;endif; 
if($filename=="") { 
$ext=strrchr($url,"."); 
if($ext!=".gif" && $ext!=".jpg"):return false;endif; 
$filename=date("dMYHis").$ext; 
} 
ob_start(); 
readfile($url); 
$img = ob_get_contents(); 
ob_end_clean(); 
$size = strlen($img); 
$fp2=@fopen($filename, "a"); 
fwrite($fp2,$img); 
fclose($fp2); 
return $filename; 
} 
$img=GrabImage("http://www.dianpub.com/images/_1978837_detector_ap100.jpg",""); 
if($img):echo '<pre><img src="'.$img.'"></pre>';else:echo "false";endif;
//記錄程序運行結(jié)束的時間
$EndTime=getmicrotime();
//返回運行時間
exit($EndTime-$BeginTime);

3.全文下載圖片

if(!empty($saveremoteimg)) 
{ 
$body = stripslashes($body); 
$img_array = array(); 
preg_match_all("/(src|SRC)=[\"|'| ]{0,}(http:\/\/(.*)\.(gif|jpg|jpeg|bmp|png))/isU",$body,$img_array); 
$img_array = array_unique($img_array[2]); 
set_time_limit(0); 
$imgUrl = $img_dir."/".strftime("%Y%m%d",time()); 
$imgPath = $base_dir.$imgUrl; 
$milliSecond = strftime("%H%M%S",time()); 
if(!is_dir($imgPath)) @mkdir($imgPath,0777); 
foreach($img_array as $key =>$value) 
{ 
$value = trim($value); 
$get_file = @file_get_contents($value); 
$rndFileName = $imgPath."/".$milliSecond.$key.".".substr($value,-3,3); 
$fileurl = $imgUrl."/".$milliSecond.$key.".".substr($value,-3,3); 
if($get_file) 
{ 
$fp = @fopen($rndFileName,"w"); 
@fwrite($fp,$get_file); 
@fclose($fp); 
} 
$body = ereg_replace($value,$fileurl,$body); 
} 
$body = addslashes($body); 
}

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

1).功能:支持?jǐn)帱c續(xù)傳的下載,能計算傳輸率,能控制傳輸率

簡易使用方法:

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

類文件:

<?
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 
}
}
?>

5. php 使用GD庫下載遠(yuǎn)程圖片

<?php 
$imgname = "http://imgdujia.kuxun.cn/newpic/929/812929/4.jpg"; 
$src_im = imagecreatefromjpeg($imgname); 
$srcW = ImageSX($src_im); //獲得圖像的寬 
$srcH = ImageSY($src_im); //獲得圖像的高 
$dst_im = ImageCreateTrueColor($srcW,$srcH); //創(chuàng)建新的圖像對象 
imagecopy($dst_im, $src_im, 0, 0, 0, 0, $srcW, $srcH); 
imagejpeg($dst_im, "newpic.jpg"); //創(chuàng)建縮略圖文件 
echo "<img src="newpic.jpg" mce_src="newpic.jpg"></img>"; 
?>

<?php
header("Content-type: image/png");
$im = imagecreatefromjpeg("http://postimg.mop.com/200602/02/74/122374/200602022335325121.JPG");
$white = imagecolorallocate($im, 0xF9, 0xD7, 0xCD);
imagefill($im, 0, 0,$white);
$text_color = imagecolorallocate($im, 233, 14, 91);
imagestring($im, 1, 5, 5, "A Simple Text String", $text_color);
imagepng($im);
imagedestroy($im);
?>

注意這個要把PHP分配內(nèi)存調(diào)大,應(yīng)用時用大內(nèi)存服務(wù)器

相關(guān)文章

  • Yii框架表單提交驗證功能分析

    Yii框架表單提交驗證功能分析

    這篇文章主要介紹了Yii框架表單提交驗證功能,結(jié)合實例形式分析了Yii框架表單提交驗證功能的用法與相關(guān)注意事項,需要的朋友可以參考下
    2017-01-01
  • PHP中使用GD庫繪制折線圖 折線統(tǒng)計圖的繪制方法

    PHP中使用GD庫繪制折線圖 折線統(tǒng)計圖的繪制方法

    本文通過代碼給大家介紹php中使用GD庫繪制折線圖,涉及到php中GD庫的一些簡單使用,本文介紹的非常詳細(xì),感興趣的朋友一起學(xué)習(xí)吧
    2015-11-11
  • PHP小教程之實現(xiàn)雙向鏈表

    PHP小教程之實現(xiàn)雙向鏈表

    雙向鏈表也叫雙鏈表,是鏈表的一種,它的每個數(shù)據(jù)結(jié)點中都有兩個指針,分別指向直接后繼和直接前驅(qū)。所以,從雙向鏈表中的任意一個結(jié)點開始,都可以很方便地訪問它的前驅(qū)結(jié)點和后繼結(jié)點。一般我們都構(gòu)造雙向循環(huán)鏈表。
    2014-06-06
  • 實現(xiàn)PHP中session存儲及刪除變量

    實現(xiàn)PHP中session存儲及刪除變量

    在本篇文章中我們給大家分享了PHP中session如何存儲及刪除變量的相關(guān)知識點內(nèi)容,有興趣的朋友們參考下。
    2018-10-10
  • Ubuntu中啟用php的mail()函數(shù)并解決發(fā)送郵件速度慢問題

    Ubuntu中啟用php的mail()函數(shù)并解決發(fā)送郵件速度慢問題

    本文主要給大家介紹的是在Ubuntu下安裝sendmail的方法,以及啟用sendmail之后,php發(fā)送郵件緩慢的原因及解決方法,有需要的小伙伴可以參考下。
    2015-03-03
  • Laravel框架中自定義模板指令總結(jié)

    Laravel框架中自定義模板指令總結(jié)

    Blade 允許你自定義命令,你可以使用 directive 方法注冊命令。下面這篇文章主要給大家總結(jié)介紹了關(guān)于Laravel框架中自定義模板指令的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來一起看看吧
    2017-12-12
  • Laravel框架使用Redis的方法詳解

    Laravel框架使用Redis的方法詳解

    這篇文章主要介紹了Laravel框架使用Redis的方法,結(jié)合實例形式較為詳細(xì)的分析了Laravel框架中Redis數(shù)據(jù)庫配置、使用方法及相關(guān)操作注意事項,需要的朋友可以參考下
    2018-05-05
  • PHP和javascript常用正則表達(dá)式及用法實例

    PHP和javascript常用正則表達(dá)式及用法實例

    這篇文章主要介紹了常用的PHP和javascript正則表達(dá)式及用法實例,精心收集的PHP和javascript正則表達(dá)式各10個,需要的朋友可以參考下
    2014-07-07
  • ThinkPHP連接數(shù)據(jù)庫及主從數(shù)據(jù)庫的設(shè)置教程

    ThinkPHP連接數(shù)據(jù)庫及主從數(shù)據(jù)庫的設(shè)置教程

    這篇文章主要介紹了ThinkPHP連接數(shù)據(jù)庫及主從數(shù)據(jù)庫的設(shè)置方法,是進(jìn)行大型web項目開發(fā)十分有用的技巧,需要的朋友可以參考下
    2014-08-08
  • Laravel實現(xiàn)ApiToken認(rèn)證請求

    Laravel實現(xiàn)ApiToken認(rèn)證請求

    今天小編就為大家分享一篇Laravel實現(xiàn)ApiToken認(rèn)證請求,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-10-10

最新評論