php 定时缓存,php如何定时删除缓存??
php運行在windows環境下:
例如:
設置用戶頭像的時候,用戶上傳了源文件,服務端保存了源文件和修改后的文件。源文件被存放在 tmp_file 文件目錄下,修改后文件被放在 header_file 目錄下。
我想要定時清理 tmp_file 下保存的源文件??不知道如何做到??能否實現如下這種:
$file=$_FILES['upload_img'];
// 保存源文件
move_uploaded_file($file['tmp_name'],'tmp_file/'.$file['name']);
// 在對源文件做相應處理(圖片裁切、縮放之類的操作)
$cav=imagecreatefromjpeg('tmp_file/'.$file['name']);
.......
// 保存處理好的文件
imagejpeg($cav,'header_file/'.$file['name']);
// 定時清理掉對應源文件,這一步怎么實現??
unlink('tmp_file/'.$file['name']);
若是使用:
set_time_limit(0);
ignore_user_abort();
sleep(60);
unlink('tmp_file/'.$file['name']);
的確是可以定時清理。不過執行一次后,必須等待60s后才能再次執行!如果突然在短時間內有大量圖片要處理時,就會堵塞執行不了。
如何使php能夠像js的 work 線程那樣,可以額外執行一個js腳本去處理需要耗費大量時間的線程而不會導致主線程卡主不執行??
回復內容:
php運行在windows環境下:
例如:
設置用戶頭像的時候,用戶上傳了源文件,服務端保存了源文件和修改后的文件。源文件被存放在 tmp_file 文件目錄下,修改后文件被放在 header_file 目錄下。
我想要定時清理 tmp_file 下保存的源文件??不知道如何做到??能否實現如下這種:
$file=$_FILES['upload_img'];
// 保存源文件
move_uploaded_file($file['tmp_name'],'tmp_file/'.$file['name']);
// 在對源文件做相應處理(圖片裁切、縮放之類的操作)
$cav=imagecreatefromjpeg('tmp_file/'.$file['name']);
.......
// 保存處理好的文件
imagejpeg($cav,'header_file/'.$file['name']);
// 定時清理掉對應源文件,這一步怎么實現??
unlink('tmp_file/'.$file['name']);
若是使用:
set_time_limit(0);
ignore_user_abort();
sleep(60);
unlink('tmp_file/'.$file['name']);
的確是可以定時清理。不過執行一次后,必須等待60s后才能再次執行!如果突然在短時間內有大量圖片要處理時,就會堵塞執行不了。
如何使php能夠像js的 work 線程那樣,可以額外執行一個js腳本去處理需要耗費大量時間的線程而不會導致主線程卡主不執行??
定時任務用crontab,這是最好的選擇。
web環境下PHP沒法做到,寫個shell,然后cronjob
什么樣的理由讓你想留60秒呢,如果沒什么考慮的話,在末尾unlink就可以了。這個場景下,我認為沒有必要增加代碼的復雜度了。
為什么不直接用memcache,他本身自己可以實現超時緩存自動刪除
保存上傳時間,然后判斷當前時間與上傳時間的時間差。
時間差大于60秒就刪除。
顯然 樓主裝的windows 不想裝cgwin,不想用crontab,可以試試:
``
if(random(1,10)==6){
// 掃目錄 清文件
}
``
隨機條件我只是舉個栗子,
你可以自己發揮:時間種子啊…touch某個文件的時間啊…等等等等
不至于每個用戶都要等啊…
刪幾十百個文件沒問題,
如果你磁盤 I/O 特別高,服務器負載高
那還是做到crontab里去吧。
windows的定時任務也是可以做到crontab效果的喲(雖然有點坑爹的是,開啟自動啟動時,每次改服務器密碼的時候非常痛苦)
如果你非的用ignore_user_abort,那就數據庫或者redis設置一個標志唯一性
相關標簽:php
本文原創發布php中文網,轉載請注明出處,感謝您的尊重!
總結
以上是生活随笔為你收集整理的php 定时缓存,php如何定时删除缓存??的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php生成临时文件,使用PHP处理内存中
- 下一篇: php cros跨域处理,php_COR