亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > PHP > 正文

PHP下載遠程圖片并保存到本地方法總結

2024-05-04 23:42:25
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了PHP下載遠程圖片并保存到本地方法總結的相關資料,需要的朋友可以參考下
 

1.獲取遠程文件大小及信息的函數

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;//記錄程序運行結束的時間$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遠程文件下載類(支持斷點續傳)

1).功能:支持斷點續傳的下載,能計算傳輸率,能控制傳輸率

簡易使用方法:

$object = new httpdownload();$object->set_byfile($file);//服務器文件名,包括路徑$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庫下載遠程圖片

<?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); //創建新的圖像對象 imagecopy($dst_im, $src_im, 0, 0, 0, 0, $srcW, $srcH); imagejpeg($dst_im, "newpic.jpg"); //創建縮略圖文件 echo "<img src="newpic.jpg" mce_src="newpic.jpg"></img>"; ?><?phpheader("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分配內存調大,應用時用大內存服務器



注:相關教程知識閱讀請移步到PHP教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产婷婷97碰碰久久人人蜜臀| 成人欧美一区二区三区黑人| 欧美高清视频在线| 欧美丰满少妇xxxxx| 日韩av一区二区在线观看| 久久精品最新地址| 97久久超碰福利国产精品…| 视频在线观看99| 欧美黑人一区二区三区| 色诱女教师一区二区三区| 久久91精品国产91久久久| 欧美巨乳美女视频| 亚洲免费电影在线观看| 欧美丝袜美女中出在线| 伊人伊人伊人久久| 最近2019中文字幕一页二页| 国产精品一区二区三区在线播放| 久久免费视频观看| 日韩av123| 国产不卡av在线| 久久精品国产久精国产思思| 精品免费在线视频| 中文字幕亚洲欧美一区二区三区| 欧美性猛交xxxxx免费看| 国语自产精品视频在线看| 国产精品麻豆va在线播放| 亚洲欧美在线x视频| 欧美另类xxx| 亚洲视频综合网| 精品亚洲夜色av98在线观看| 亚洲精品久久久久中文字幕二区| 久久久噜久噜久久综合| 亚洲大胆美女视频| www.欧美精品一二三区| 国产精品流白浆视频| 亚洲欧美色图片| 国产精品极品美女粉嫩高清在线| 91久久嫩草影院一区二区| 麻豆一区二区在线观看| 日韩大胆人体377p| 日韩精品在线观看网站| 亚洲自拍欧美另类| 久久久久久久久久国产精品| 91精品视频观看| 亚洲国产成人av在线| 91大神福利视频在线| 午夜精品一区二区三区在线播放| xxxx性欧美| 久久在线观看视频| 青青久久av北条麻妃黑人| 国产视频999| 欧美伊久线香蕉线新在线| 欧美亚洲国产日本| 最近中文字幕mv在线一区二区三区四区| 欧洲亚洲免费视频| 日韩免费在线视频| 亚洲精品国精品久久99热| 亚洲国产古装精品网站| 91超碰中文字幕久久精品| 国语自产精品视频在线看| 日本最新高清不卡中文字幕| 欧美精品免费播放| 成人午夜在线视频一区| 国产精自产拍久久久久久| 久久视频免费在线播放| 久久久成人的性感天堂| 欧美成人小视频| 亚洲男人av在线| 欧美亚洲成人xxx| 亚洲女人被黑人巨大进入| 精品国产精品三级精品av网址| 91久久久久久久久久久久久| 在线观看亚洲视频| 欧美夫妻性视频| 国产91精品视频在线观看| 原创国产精品91| 日韩av电影在线播放| 日韩综合视频在线观看| 久国内精品在线| 在线视频欧美日韩精品| 久久av红桃一区二区小说| 国产一区二区三区日韩欧美| 国模私拍一区二区三区| 色樱桃影院亚洲精品影院| 91色琪琪电影亚洲精品久久| 色av中文字幕一区| 91网站在线看| 国产精品69久久久久| 成人中心免费视频| 欧美在线精品免播放器视频| 在线看日韩av| 国产精品99久久久久久人| 日韩电视剧在线观看免费网站| 国产欧美日韩91| 亚洲一区二区福利| 欧美日本高清一区| 欧美高清激情视频| 欧美日韩在线观看视频小说| 欧美三级欧美成人高清www| 亚洲国产中文字幕在线观看| 日本成人精品在线| 亚洲免费电影在线观看| 国产婷婷97碰碰久久人人蜜臀| 国产精品久久久91| 亚洲一区二区在线| 国产成人精品av| 午夜精品一区二区三区在线| 久久香蕉国产线看观看av| 91久久精品国产91性色| 亚洲电影免费观看高清完整版在线| 91日韩在线视频| 欧美激情按摩在线| 国产精品综合久久久| 国产精品第1页| 日韩小视频在线| 亚洲国产美女久久久久| 日韩亚洲综合在线| 亚洲一区二区三区乱码aⅴ蜜桃女| 欧美激情精品久久久久| 欧美精品激情视频| 97av在线视频| 国产91在线播放精品91| 91精品国产91久久久久福利| 亚洲免费电影在线观看| 欧美性猛交99久久久久99按摩| 色诱女教师一区二区三区| 亚洲人成在线电影| 欧美国产日韩一区二区| 欧美尤物巨大精品爽| 欧美中文在线观看国产| 国产成人拍精品视频午夜网站| 久久在精品线影院精品国产| 精品亚洲国产成av人片传媒| 日本精品久久久久影院| 国产va免费精品高清在线观看| 亚洲欧美日韩中文在线| 91精品久久久久久久久久入口| 欧美亚洲视频在线看网址| 亚洲国产日韩欧美在线动漫| 精品视频久久久| 久久男人的天堂| 亚洲免费视频一区二区| 亚洲国产古装精品网站| 亚洲欧美国产va在线影院| 欧美日韩福利电影| 亚洲视频在线看| 97在线免费观看| 精品偷拍一区二区三区在线看| 亚洲精品www| 成人午夜高潮视频| 狠狠躁夜夜躁人人爽天天天天97| 中文字幕在线看视频国产欧美| 色哟哟亚洲精品一区二区| 亚洲性夜色噜噜噜7777| 国内免费久久久久久久久久久| 成人福利在线观看| 538国产精品一区二区在线| 九九热精品在线| 精品一区电影国产| 亚洲精品成人免费| 日韩三级影视基地| 原创国产精品91| 麻豆国产va免费精品高清在线| 夜夜狂射影院欧美极品|