最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

php 根據(jù)url自動生成縮略圖并處理高并發(fā)問題

 更新時間:2014年01月23日 17:13:30   作者:  
服務器生成縮略圖的時機一般分為兩種:上傳文件時生成、訪問時生成,下面為大家介紹下php根據(jù)url自動生成縮略圖并處理高并發(fā)問題
服務器生成縮略圖的時機一般分為兩種:

1.上傳文件時生成

優(yōu)點:上傳時就已經(jīng)生成需要的縮略圖,讀取時不需要再判斷,減少cpu運算。

缺點:當縮略圖尺寸變化時或新增尺寸時,需要重新生成所有的縮略圖。

2.訪問時生成

優(yōu)點:1.當有用戶訪問時才需要生成,沒有訪問的不用生成,節(jié)省空間。

2.當修改縮略圖尺寸時,只需要修改設置,無需重新生成所有縮略圖。

缺點:當縮略圖不存在需要生成時,高并發(fā)訪問會非常耗服務器資源。

雖然訪問時生成會有高并發(fā)問題,但其他優(yōu)點都比第一種方法好,因此只要解決高并發(fā)問題就可以。

關于如何根據(jù)url自動生成縮略圖的原理及實現(xiàn),可以參考我之前寫的《php 根據(jù)url自動生成縮略圖》。

高并發(fā)處理原理:

1.當判斷需要生成圖片時,在tmp/目錄創(chuàng)建一個臨時標記文件,文件名用md5(需要生成的文件名)來命名,處理結束后再將臨時文件刪除。

2.當判斷要生成的文件在tmp/目錄有臨時標記文件,表示文件正在處理中,則不調(diào)用生成縮略圖方法,而等待,直到臨時標記文件被刪除,生成成功輸出。

修改的文件如下,其他與之前一樣。

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;

if(!file_exists($source)){ // 原圖不存在
exit();
}

// 高并發(fā)處理
$processing_flag = '/tmp/thumb_'.md5($dest); // 用于判斷文件是否處理中
$is_wait = 0; // 是否需要等待
$wait_timeout = 5; // 等待超時時間

if(!file_exists($processing_flag)){
file_put_contents($processing_flag, 1, true);
}else{
$is_wait = 1;
}

if($is_wait){ // 需要等待生成
while(file_exists($processing_flag)){
if(time()-$starttime>$wait_timeout){ // 超時
exit();
}
usleep(300000); // sleep 300 ms
}

if(file_exists($dest)){ // 圖片生成成功
ob_clean();
header('content-type:'.mime_content_type($dest));
exit(file_get_contents($dest));
}else{
exit(); // 生成失敗退出
}
}

// 創(chuàng)建縮略圖
$obj = new PicThumb($logfile);
$obj->set_config($config);
$create_flag = $obj->create_thumb($source, $dest);

unlink($processing_flag); // 刪除處理中標記文件

if($create_flag){ // 判斷是否生成成功
ob_clean();
header('content-type:'.mime_content_type($dest));
exit(file_get_contents($dest));
}

?>

源碼下載地址:點擊查看

相關文章

  • Yii學習總結之安裝配置

    Yii學習總結之安裝配置

    本文是Yii學習總結系列文章的第一篇,主要給大家介紹下YII的簡單介紹及安裝和配置,有需要的小伙伴參考下吧。
    2015-02-02
  • PHP 遞歸效率分析

    PHP 遞歸效率分析

    PHP的遞歸效率一般認為是低效的。大概一年前,我寫了一篇博文,對三種遍歷樹的方法進行了比較,發(fā)現(xiàn)遞歸算法的效率最低。
    2009-11-11
  • PHP生成月歷代碼

    PHP生成月歷代碼

    PHP生成月歷代碼...
    2007-06-06
  • PHP針對JSON操作實例分析

    PHP針對JSON操作實例分析

    這篇文章主要介紹了PHP針對JSON操作的常用方法,實例分析了json轉數(shù)組、數(shù)組轉json等技巧與相關注意事項,需要的朋友可以參考下
    2015-01-01
  • php-fpm中max_children的配置

    php-fpm中max_children的配置

    今天小編就為大家分享一篇關于php-fpm中max_children的配置,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • php遍歷刪除整個目錄及文件的方法

    php遍歷刪除整個目錄及文件的方法

    這篇文章主要介紹了php遍歷刪除整個目錄及文件的方法,涉及php操作目錄及文件的技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-03-03
  • PHP實現(xiàn)將瀏覽歷史頁面網(wǎng)址保存到cookie的方法

    PHP實現(xiàn)將瀏覽歷史頁面網(wǎng)址保存到cookie的方法

    這篇文章主要介紹了PHP實現(xiàn)將瀏覽歷史頁面網(wǎng)址保存到cookie的方法,涉及php對cookie的讀取、字符串轉化及保存等技巧,需要的朋友可以參考下
    2015-01-01
  • PHP error_log()將錯誤信息寫入一個文件(定義和用法)

    PHP error_log()將錯誤信息寫入一個文件(定義和用法)

    PHP error_log()定義和用法,帶有二個簡單小例子加函數(shù)解釋
    2013-10-10
  • PHP生成條形圖的方法

    PHP生成條形圖的方法

    這篇文章主要介紹了PHP生成條形圖的方法,可實現(xiàn)生成柱狀的條形圖,適用于一些類似柱狀圖顯示報表的場合,具有一定的實用價值,需要的朋友可以參考下
    2014-12-12
  • PHP實現(xiàn)微信掃碼登錄功能的兩種方式總結

    PHP實現(xiàn)微信掃碼登錄功能的兩種方式總結

    這篇文章主要為大家介紹了利用PHP實現(xiàn)微信掃碼登錄功能的兩種方式,文中的示例代碼講解詳細,對我們學習有一定借鑒價值,需要的可以參考一下
    2022-08-08

最新評論

灵丘县| 宝山区| 玛曲县| 谢通门县| 靖边县| 建宁县| 红原县| 名山县| 东方市| 改则县| 两当县| 徐州市| 曲靖市| 阳春市| 阜新| 多伦县| 蒙城县| 太仓市| 长汀县| 绥江县| 定陶县| 广平县| 营口市| 宁海县| 民县| 珠海市| 许昌县| 清徐县| 永寿县| 潼关县| 漳州市| 建宁县| 大理市| 将乐县| 凯里市| 涪陵区| 炎陵县| 乳山市| 修水县| 延安市| 新巴尔虎左旗|