我有一個壓縮圖像的cron腳本。它基本上遍歷文件夾,然後壓縮文件夾中的文件。我的問題是一些圖像正在中途處理。我的理論是,用戶正在上傳圖像,在圖像上傳文件之前,壓縮器會嘗試壓縮文件。從而壓縮半上傳的圖像,並導致顯示一半圖像。如何判斷文件是否已經在PHP中上傳完成?
- 有沒有在PHP中確認文件已完成上傳的方法?所以,我只能做一次壓縮,我知道該文件已被完全寫入?
- 或者,有沒有辦法檢查一個文件是否被另一個進程使用?
- 或者,它是否足夠可靠,可以查看文件何時「寫入磁盤」,並且在10分鐘之後才處理它?
我有一個壓縮圖像的cron腳本。它基本上遍歷文件夾,然後壓縮文件夾中的文件。我的問題是一些圖像正在中途處理。我的理論是,用戶正在上傳圖像,在圖像上傳文件之前,壓縮器會嘗試壓縮文件。從而壓縮半上傳的圖像,並導致顯示一半圖像。如何判斷文件是否已經在PHP中上傳完成?
有處理方案
標誌
設置標誌,文件之前修改/寫兩種方式。 我們的應用程序處理大量文件,我們在將它們處理完成之前設置標誌,一旦完成,我們移除標誌,因爲它在cron標誌上運行是處理文件的最佳方式。
通常,您可以在每個文件的表格上添加一列。或者您可以有一個數組,您可以在其中存儲所有當前處理的文件。
filemtime()
正如你提到的,您可以檢查一樣,如果文件mtime
是當前時間,那麼你就壓縮他們超過10分鐘,但如果一些其他進程正在使用的文件打開在同一時間。它再次導致問題。
所以它更好的去與國旗。如果其他進程從不經常修改文件。
複製文件並壓縮複製。 –
可以看看寫入文件的時間,實際上1分鐘的可靠性已經足夠。 http://php.net/manual/en/function.filemtime.php –