Maison > Article > développement back-end > Comment récupérer des images distantes en php et les enregistrer localement
Idée d'implémentation :
Déterminez d'abord si le chemin de l'image est vide, sinon, continuez, puis obtenez la taille des informations sur l'image, le nom du suffixe du chemin de l'image, puis calculer La taille du code source de l'image est de 1 Ko écrite à chaque fois jusqu'à ce que toutes les données soient obtenues.
Recommandation vidéo d'apprentissage : Tutoriel vidéo php
Exemple de démonstration :
/** * PHP将网页上的图片攫取到本地存储 * @param $imgUrl 图片url地址 * @param string $saveDir 本地存储路径 默认存储在当前路径 * @param null $fileName 图片存储到本地的文件名 * @return mix */ function crabImage($imgUrl, $saveDir='./', $fileName=null){ if(empty($imgUrl)){ return false; } //获取图片信息大小 $imgSize = getImageSize($imgUrl); if(!in_array($imgSize['mime'],array('image/jpg', 'image/gif', 'image/png', 'image/jpeg'),true)){ return false; } //获取后缀名 $_mime = explode('/', $imgSize['mime']); $_ext = '.'.end($_mime); if(empty($fileName)){ //生成唯一的文件名 $fileName = uniqid(time(),true).$_ext; } //开始攫取 ob_start(); readfile($imgUrl); $imgInfo = ob_get_contents(); ob_end_clean(); if(!file_exists($saveDir)){ mkdir($saveDir,0777,true); } $fp = fopen($saveDir.$fileName, 'a'); $imgLen = strlen($imgInfo); //计算图片源码大小 $_inx = 1024; //每次写入1k $_time = ceil($imgLen/$_inx); for($i=0; $i<$_time; $i++){ fwrite($fp,substr($imgInfo, $i*$_inx, $_inx)); } fclose($fp); return array('file_name'=>$fileName,'save_path'=>$saveDir.$fileName); } $url = 'https://mmbiz.qlogo.cn/mmbiz/ 7WQtTI9h56hgvOH8J0Xp5v97cDNOxf94vq0NdNOhZmb2ZiaJLfwd2U8gNoEvTQXdWlRPOuibkkSebexmR2epE0pQ/0?wx_fmt=gif'; //$url = 'http://www.phpernote.com/images/logo.gif'; //$url = 'http://avatar.csdn.net/5/3/6/1_u014236259.jpg'; var_dump( crabImage($url) );
Autres recommandations de didacticiels d'articles connexes : Tutoriel php
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!