Heim >Backend-Entwicklung >PHP-Tutorial >PHP sammelt entfernte Bilder und speichert sie lokal

PHP sammelt entfernte Bilder und speichert sie lokal

伊谢尔伦
伊谢尔伦Original
2016-11-23 14:56:101732Durchsuche

/**
 * 下载远程图片到本地
 *
 * @param $url string 远程文件地址
 * @param $filename string 保存后的文件名(为空时则为随机生成的文件名,否则为原文件名)
 * @param $fileType array 允许的文件类型
 * @param $dirName string 文件保存的路径(路径其余部分根据时间系统自动生成)
 * @param $type int 远程获取文件的方式
 * @return json 返回文件名、文件的保存路径
 * @author www.phpxs.com
 */
function download_image($url, $fileName = '', $dirName, $fileType = array('jpg', 'gif', 'png'), $type = 1)
{
    if ($url == '')
    {
        return false;
    }
 
    // 获取文件原文件名
    $defaultFileName = basename($url);
 
    // 获取文件类型
    $suffix = substr(strrchr($url, '.'), 1);
    if (!in_array($suffix, $fileType))
    {
        return false;
    }
 
    // 设置保存后的文件名
    $fileName = $fileName == '' ? time() . rand(0, 9) . '.' . $suffix : $defaultFileName;
 
    // 获取远程文件资源
    if ($type)
    {
        $ch = curl_init();
        $timeout = 30;
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
        $file = curl_exec($ch);
        curl_close($ch);
    }
    else
    {
        ob_start();
        readfile($url);
        $file = ob_get_contents();
        ob_end_clean();
    }
 
    // 设置文件保存路径
    //$dirName = $dirName . '/' . date('Y', time()) . '/' . date('m', time()) . '/' . date('d', time());
    $dirName = $dirName . '/' . date('Ym', time());
    if (!file_exists($dirName))
    {
        mkdir($dirName, 0777, true);
    }
 
    // 保存文件
    $res = fopen($dirName . '/' . $fileName, 'a');
    fwrite($res, $file);
    fclose($res);
 
    return array(
        'fileName' => $fileName,
        'saveDir' => $dirName
    );
    }
/**
 * 批量下载博客中的图片到本地
 */
public function index()
{
    global $_G;
 
    $blogModel = model('Blog', 'blog');
    $list = $blogModel->order('gid desc')->limit(10)->findPage();
 
    $page = get_gpc('page') ? get_gpc('page') : 1;
    $totalPages = $list['totalPages'];
    $page = $page + 1;
 
    if ($page > $totalPages)
    {
        die('更新完毕!');
    }
 
    foreach ($list['data'] as $val)
    {
        $content = $val['content'];
        $excerpt = $val['excerpt'];
 
        $_G['isContentUpdate'] = $_G['isExcerptUpdate'] = false;
 
        /* 内容 */
        $content = preg_replace_callback("/src=\"(http:\/\/images\.cnblogs\.com\/cnblogs_com[^\"]+)\"/", function($matches) {
 
            global $_G;
            $_G['isContentUpdate'] = true;
 
            // 下载远程图片到本地
            $res = download_image($matches[1], 'old', 'd:/PHP/xampp/htdocs/emlog/content/uploadfile');
 
            // 返回 下载后的图片url地址
            return 'src="/content/uploadfile/' . date('Ym', time()) . '/' . $res['fileName'] . '"';
 
        }, $content);
 
        /* 摘要 */
        $excerpt = preg_replace_callback("/src=\"(http:\/\/images\.cnblogs\.com\/cnblogs_com[^\"]+)\"/", function($matches) {
 
            global $_G;
            $_G['isExcerptUpdate'] = true;
 
            // 下载远程图片d到本地
            $res = download_image($matches[1], 'old', 'd:/PHP/xampp/htdocs/emlog/content/uploadfile');
 
            // 返回 下载后的图片url地址
            return 'src="/content/uploadfile/' . date('Ym', time()) . '/' . $res['fileName'] . '"';
 
        }, $excerpt);
 
        /* 更新数据库 */
        $where = array(
            'gid' => $val['gid']
        );
        $data = array();
 
        if ($_G['isContentUpdate'])
        {
            $data['content'] = $content;
        }
 
        if ($_G['isExcerptUpdate'])
        {
            $data['excerpt'] = $excerpt;
        }
 
        if ($data)
        {
            $blogModel->where($where)->save($data);
        }
    }
 
    /* 更新下一页 */
    $url = url('blog/Main/index', array('page' => $page));
    $msg = '正在更新' . $page . '/' . $totalPages;
    redirect($url, 2, $msg);
}


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:PHP erfasst feste BildgrößeNächster Artikel:PHP erfasst feste Bildgröße