2014-01-31 22 views
1

我有一個奇怪的行爲,使用簡單的PHP腳本。必須等待3秒才能將文件重命名後copy或move_uploaded_file

當我嘗試後move_uploaded_file(與複製相同的行爲)的文件重命名,它失敗,因爲該文件不是爲新的文件夾(而,move_uploaded_file回報true) ,但如果等待2 OU後3秒move_uploaded_file,重命名工作正常。

此代碼失敗:

$result = move_uploaded_file($temp_name, 'new_folder/'.$filename); 
echo $result; //=> True 
$result = rename('new_folder/'.$filename, 'new_new_folder/'.$filename); 
echo $result; //=> False 

此代碼的工作:

$result = move_uploaded_file($temp_name, 'new_folder/'.$filename); 
echo $result; //=> True 
sleep(3); 
$result = rename('new_folder/'.$filename, 'new_new_folder/'.$filename); 
echo $result; //=> True 

我儘量只調用重命名前,在第一種情況下,列出new_folder的文件,它不返回文件,在第二種情況下,文件被列出。

那裏會發生什麼?

我使用PHP-FPM和xcache。 (用了XCache禁用無變化)

+0

什麼是文件的大小? –

+0

至少1MB。事實上,它不會發生在較小的文件。 –

+0

它與move_uploaded_file的行爲有關。在文件完全移動之前解析下一個代碼。 –

回答

1

代碼:

if(move_uploaded_file($temp_name, 'new_folder/'.$filename)) { 
    echo $filename; 
    $result = rename('new_folder/'.$filename, 'new_new_folder/'.$filename); 
    echo $filename; 
    echo $result; 
    //=> True 
} 
相關問題