首頁  >  文章  >  後端開發  >  如何讓php 根據url自動產生縮圖,並處理高並發問題

如何讓php 根據url自動產生縮圖,並處理高並發問題

jacklove
jacklove原創
2018-06-09 14:18:081663瀏覽

伺服器產生縮圖的時機一般分為兩種:

#1.上傳檔案時產生

#優點:上傳時就已經產生需要的縮圖,讀取時不需要再判斷,減少cpu運算。

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

2.訪問時生成

#優點:1.當有用戶訪問時才需要生成,沒有訪問的不用生成,節省空間。

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

缺點:當縮圖不存在需要產生時,高並發存取會非常耗伺服器資源。

雖然存取時產生會有高並發問題,但其他優點都比第一種方法好,因此只要解決高並發問題就可以。

關於如何根據url自動產生縮圖的原理及實現,可以參考我之前寫的《php 根據url自動產生縮圖》。

高並發處理原理:

#1.當判斷需要產生圖片時,在tmp/目錄建立一個暫存標記文件,檔案名稱以md5(需要產生的檔案名稱)命名,處理結束後再將暫存文件刪除。

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

修改的檔案如下,其他與之前一樣。

createthumb.php

$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(); // 生成失败退出
    }
}
// 创建缩略图
$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));
}
?>

本篇文章講解如何讓php 根據url自動產生縮圖,並處理高並發問題,更多相關問題請關注php中文網。

相關建議:

關於php 字串壓縮方法之間的比較

關於php Timer 頁面執行時間監測類別的相關介紹

關於php 建構子支援不同個數字參數的方法介紹

#

以上是如何讓php 根據url自動產生縮圖,並處理高並發問題的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn