我有一個PHP腳本,用於將文件移出服務器上的特定文件夾(IBM AS400)。我遇到的問題是,有時腳本在文件仍在移動到文件夾的過程中運行。讓PHP等到一個文件完成傳輸後再傳輸
我的錯誤邏輯假設如果一個文件「正在使用」PHP不會嘗試移動它,但它會導致文件損壞。
我想我能做到這一點:
$oldModifyTime = filemtime('thefile.pdf');
sleep(2);
if($oldModifyTime === filemtime('thefile.pdf'){
rename('thefile.pdf','/folder2/thefile.pdf');
}
但filemtime功能拿出即使文件被寫入相同的值。我也嘗試過使用fileatime獲得相同的結果。
如果我在Windows中執行右鍵單擊 - >屬性,則修改日期和訪問日期會隨着文件的寫入而不斷變化。
任何想法如何確定文件是否完成傳輸之前做任何事情呢?
初始文件是從終端用戶保存文件來進入文件夾,所以我不能自動「重命名/複製到正確的文件夾」,而無需在服務器端執行並遇到同樣的問題。 – Mike 2011-12-19 18:20:54
這真的是最好的解決方案。如果是手動過程,則可能需要教育用戶並調整腳本。例如,您可以忽略以.tmp結尾的所有文件,並指示您的用戶使用.tmp上傳,然後在上傳後重命名。 – 2011-12-19 18:28:39
如果即使這是不可能的,那麼看看這個問題:http://stackoverflow.com/q/4693168/608781 – 2011-12-19 18:29:00