2011-03-02 68 views
2

我需要能夠做一個while循環來生成文件名並檢查它是否不存在於目錄中,然後應該繼續使用腳本,Do While循環 - 生成文件名並檢查文件是否存在

do { 
     $filename = random(18) . $fileEx; 
} while(!file_exists($filename)); 

$move_file = move_uploaded_file($request_file['tmp_name'][$i], 'files/' . $filename); 

if($move_file) 
{ 
    // ... 

但是當我這樣做,它只是進入一個無限循環 - 沒有錯誤使用E_ALL拋出。

回答

9

只要文件存在,您就應該運行循環,而不是隻要它不存在(如果您有唯一的文件名,這將永遠存在)。將其更改爲

} while(file_exists($filename)); 
+0

+1很好解釋! – 2011-03-02 13:38:13

+0

稍微修復一下,歡呼隊友。 *在6分鐘內接受答案* – MacMac 2011-03-02 13:40:16

1

這是錯誤的做法。您應該使用確保以原子方式創建文件的功能。

php有tempnam

+0

非常有用的功能,但不幸的是,不僅可以添加前綴而不是後綴(例如,如果你想創建一個臨時的.html) – 2014-12-05 12:10:10

+0

是的,的確如此。如果你完全控制了目錄的內容(你應該),你可以使用生成的文件作爲鎖。所以你1)生成文件randxyz 2)檢查randxyz.html不存在3)創建randxyz.html 4)刪除randxyz。如果點2失敗(這真是厄運!),請移除生成的文件並重試。 – 2014-12-05 13:42:54