2011-03-02 104 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