这里有新鲜出炉的 PHP 面向对象编程,程序狗速度看过来!
PHP(外文名: Hypertext Preprocessor,中文名:"超文本预处理器")是一种通用开源脚本语言。语法吸收了 C 语言、Java 和 Perl 的特点,入门门槛较低,易于学习,使用广泛,主要适用于 web 开发领域。PHP 的文件后缀名为 php。
这篇文章主要介绍了 php 获取远程图片并下载保存到本地的方法, 结合实例形式对比分析了 php 基于 curl 与缓存操作获取远程图片及图片保存的相关操作技巧, 需要的朋友可以参考下
本文实例讲述了 php 获取远程图片并下载保存到本地的方法。分享给大家供大家参考,具体如下:
远程图片指的是远端服务器上的数据我们可以通过 php 的许多函数来读取下载了,这里整理了两个可以自动下载远程图片并下载保存到本地的例子。
例 1,可以自动识别图片类型然后进行对应的保存
- /*
- *功能:php完美实现下载远程图片保存到本地
- *参数:文件url,保存文件目录,保存文件名称,使用的下载方式
- *当保存文件名称为空时则使用远程文件原来的名称
- */
- function getImage($url, $save_dir = '', $filename = '', $type = 0) {
- if (trim($url) == '') {
- return array('file_name' = >'', 'save_path' = >'', 'error' = >1);
- }
- if (trim($save_dir) == '') {
- $save_dir = './';
- }
- if (trim($filename) == '') { //保存文件名
- $ext = strrchr($url, '.');
- if ($ext != '.gif' && $ext != '.jpg') {
- return array('file_name' = >'', 'save_path' = >'', 'error' = >3);
- }
- $filename = time().$ext;
- }
- if (0 !== strrpos($save_dir, '/')) {
- $save_dir. = '/';
- }
- //创建保存目录
- if (!file_exists($save_dir) && !mkdir($save_dir, 0777, true)) {
- return array('file_name' = >'', 'save_path' = >'', 'error' = >5);
- }
- //获取远程文件所采用的方法
- if ($type) {
- $ch = curl_init();
- $timeout = 5;
- curl_setopt($ch, CURLOPT_URL, $url);
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
- curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
- $img = curl_exec($ch);
- curl_close($ch);
- } else {
- ob_start();
- readfile($url);
- $img = ob_get_contents();
- ob_end_clean();
- }
- //$size=strlen($img);
- //文件大小
- $fp2 = @fopen($save_dir.$filename, 'a');
- fwrite($fp2, $img);
- fclose($fp2);
- unset($img, $url);
- return array('file_name' = >$filename, 'save_path' = >$save_dir.$filename, 'error' = >0);
- }
例 2, 如果不是图片会自动跳过
- <?php
- function GrabImage($url, $filename = "") {
- if ($url == ""):return false;
- endif;
- //如果$url地址为空,直接退出
- if ($filename == "") {
- //如果没有指定新的文件名
- $ext = strrchr($url, ".");
- //得到$url的图片格式
- if ($ext != ".gif" && $ext != ".jpg"):return false;
- endif;
- //如果图片格式不为.gif或者.jpg,直接退出
- $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.phperz.com /6648d73db0edd1e89f3d62f7.jpg", "");
- if ($img):echo '<pre><img src="' . $img . '"></pre>';
- //如果返回值为真,这显示已经采集到服务器上的图片
- else:echo "false";
- endif;
- //否则,输出采集失败
- ?>
其实上面的下载方式小编最喜欢的不是这两个而是 curl 保存异步下载图片会比较好。
希望本文所述对大家 PHP 程序设计有所帮助。
来源: http://www.phperz.com/article/17/0804/342251.html