php根據url自動產生縮圖的原理

來源:互聯網
上載者:User

原理:設定apache rewrite ,當圖片不存在時,調用php建立圖片。

例如

原圖路徑為:http://localhost/upload/news/2013/07/21/1.jpg

縮圖路徑為:http://localhost/supload/news/2013/07/21/1.jpg

當訪問 http://localhost/supload/news/2013/07/21/1.jpg 時,如圖片存在,則顯示圖片。否則,調用createthumb.php產生圖片。

目錄結構如下:

www/PicThumb.class.php

www/ThumbConfig.php

www/upload/news/2013/07/21/1.jpg

www/upload/article/2013/07/21/2.jpg

www/supload/.htaccess

www/supload/watermark.png

www/supload/createthumb.php

http://localhost/ 指向 www目錄

PicThumb.class.php 用法請查看這裡:http://blog.csdn.net/fdipzone/article/details/9316385

需要開啟apache rewrite

sudo a2enmod rewrite

.htaccess

<IfModule mod_rewrite.c>  RewriteEngine On        # '-s' (is regular file, with size)  # '-l' (is symbolic link)  # '-d' (is directory)  # 'ornext|OR' (or next condition)  # 'nocase|NC' (no case)  # 'last|L' (last rule)        RewriteCond %{REQUEST_FILENAME} -s [OR]  RewriteCond %{REQUEST_FILENAME} -l [OR]  RewriteCond %{REQUEST_FILENAME} -d  RewriteRule ^.*$ - [NC,L]  RewriteRule ^.*$ createthumb.php?path=%{REQUEST_URI} [NC,L]        </IfModule>

createthumb.php

<?php  define('WWW_PATH', dirname(dirname(__FILE__))); // 網站www目錄        require(WWW_PATH.'/PicThumb.class.php'); // include PicThumb.class.php  require(WWW_PATH.'/ThumbConfig.php');    // include ThumbConfig.php        $logfile = WWW_PATH.'/createthumb.log';  // 記錄檔  $source_path = WWW_PATH.'/upload/';      // 原路徑  $dest_path = WWW_PATH.'/supload/';       // 目標路徑        $path = isset($_GET['path'])? $_GET['path'] : '';  // 訪問的圖片URL        // 檢查path  if(!$path){      exit();  }        // 擷取圖片URI  $relative_url = str_replace($dest_path, '', WWW_PATH.$path);        // 擷取type  $type = substr($relative_url, 0, strpos($relative_url, '/'));        // 擷取config  $config = isset($thumb_config[$type])? $thumb_config[$type] : '';        // 檢查config  if(!$config || !isset($config['fromdir'])){      exit();  }        // 原圖檔案  $source = str_replace('/'.$type.'/', '/'.$config['fromdir'].'/', $source_path.$relative_url);        // 目標檔案   $dest = $dest_path.$relative_url;        // 建立縮圖  $obj = new PicThumb($logfile);  $obj->set_config($config);  if($obj->create_thumb($source, $dest)){      ob_clean();      header('content-type:'.mime_content_type($dest));      exit(file_get_contents($dest));  }        ?>

查看本欄目更多精彩內容:http://www.bianceng.cnhttp://www.bianceng.cn/webkf/PHP/

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.