中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Nginx怎么配合php實現生成實時縮略圖功能

發布時間:2022-04-29 17:28:35 來源:億速云 閱讀:215 作者:zzz 欄目:大數據

這篇文章主要講解了“Nginx怎么配合php實現生成實時縮略圖功能”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Nginx怎么配合php實現生成實時縮略圖功能”吧!

nginx配置:

復制代碼 代碼如下:

#假設,服務器上面有一個文件:abc.jpg,通過http://filefs.domain.com/file/abc.jpg能夠訪問到原圖。其#實一般的,我們在數據庫里面也就保存了“/file/abc.jpg”這部分內容。
#現在,我們要實現通過http://filefs.domain.com/file/abc.jpg.w320.jpg由服務器自動產生#abc.jpg.w320.jpg(w320,320px的寬度)這個縮略圖。并返回圖片數據。
#要滿足以下兩個條件:
#   1.如果abc.jpg.w320.jpg存在,則不重新產生圖片
#   2.如果不存在,則在同一次的請求中,返回圖片數據,和保存圖片文件到服務器。
server {
    listen       80;
    server_name  filefs.domain.com;
    
    root /var/www/http/filefs.domain.com;
    location / {
        index  index.html index.htm;
    }
    
    location ~ \.(png|jpg|jpeg|gif)$ {
        #如果文件不存在,則rewrite到產生圖片的腳本文件autoimg.php
        if (!-f $request_filename) {
            rewrite ^/.*$ /autoimg.php;
            expires max;
        }
        #如果文件存在,則設置過期時間,關閉訪問日志
        if ( -f $request_filename ) {
            expires max;
            access_log off;
        }
    }
    
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
    
    location ~ autoimg.php$ {#安全性考慮,文件服務器,只這個腳本文件的范圍提交給php處理
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  script_filename  /var/www/http/filefs.domain.com$fastcgi_script_name;
        include        /usr/local/nginx/conf/fastcgi_params;
    }
}

php產生圖片文件代碼:

復制代碼 代碼如下:

<?php
    $file = $_server ['request_uri'];//請求字串 /file/abc.jpg.w320.jpg
    $desfile = $_server ['document_root'] . $file; //目標目標路徑 /var/www/http/file/abc.jpg.w320.jpg
    $dirname = dirname ( $desfile ) . "/";
    $filename = basename ( $desfile );
    if (preg_match ( "/([^\.]+\.(png|jpg|jpeg|gif))\.w([\d]+)\.(jpg)/i", $filename, $m )) {
        $srcfile = $dirname . $m [1];
        $width = $m [3];                    //匹配出輸出文件寬度
        if (in_array ( $width, array (      //只產生202和320寬度的文件
                202,
                320
        ) ) && file_exists ( $srcfile )) {  //而且文件不存在
            thumbnail ( $srcfile, $desfile, $width );
        }
    }
    
    /**
     * 生成縮略圖
     *
     * @param 源 $src           
     * @param 縮放后的寬帶 $width        
     *
     */
    function thumbnail($src, $des, $width) {
        ob_start ();//開始截獲輸出流
        $imageinfos = getimagesize ( $src );
        $ext = strtolower ( pathinfo ( $src, 4 ) );
        if ($imageinfos [2] == 1) {
            $im = imagecreatefromgif ( $src );
        } elseif ($imageinfos [2] == 2) {
            $im = imagecreatefromjpeg ( $src );
        } elseif ($imageinfos [2] == 3) {
            $im = imagecreatefrompng ( $src );
        }
        
        if (isset ( $im )) {
            $height = $imageinfos [1] * $width / $imageinfos [0];
            $dst_img = imagecreatetruecolor ( $width, $height );
            
            imagesavealpha ( $dst_img, true );
            $trans_colour = imagecolorallocatealpha ( $dst_img, 0, 0, 0, 127 );
            imagefill ( $dst_img, 0, 0, $trans_colour );
            
            imagecopyresampled ( $dst_img, $im, 0, 0, 0, 0, $width, $height, $imageinfos [0], $imageinfos [1] );
            
            header ( 'content-type:image/jpg' );
            imagejpeg ( $dst_img, null, 90 );//輸出文件流,90--壓縮質量,100表示最高質量。
            
            @imagedestroy ( $im );
            @imagedestroy ( $dst_img );
        } else {
            echo @file_get_contents ( $src );
        }
        $content = ob_get_contents ();//獲取輸出流
        ob_end_flush ();//輸出流到網頁,保證第一次請求也有圖片數據放回
        @file_put_contents ( $des, $content );//保存文件
    }
?>

效果圖:

Nginx怎么配合php實現生成實時縮略圖功能

Nginx怎么配合php實現生成實時縮略圖功能

感謝各位的閱讀,以上就是“Nginx怎么配合php實現生成實時縮略圖功能”的內容了,經過本文的學習后,相信大家對Nginx怎么配合php實現生成實時縮略圖功能這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

迭部县| 仁寿县| 永善县| 班戈县| 太湖县| 惠州市| 大厂| 布尔津县| 正安县| 宁海县| 塔河县| 台湾省| 佛山市| 科技| 察隅县| 宜兰县| 娄烦县| 徐水县| 桐柏县| 佛山市| 大余县| 柳江县| 错那县| 会东县| 乌审旗| 江都市| 葫芦岛市| 高邑县| 滁州市| 含山县| 井研县| 广水市| 卓尼县| 桃园市| 万盛区| 高安市| 革吉县| 明溪县| 大厂| 安溪县| 台东县|