Php Do While循环-生成文件名并检查文件是否存在

Php Do While循环-生成文件名并检查文件是否存在,php,while-loop,Php,While Loop,我需要能够做一个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) { // ... 但是当我这样

我需要能够做一个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)
{
   // ...

但是当我这样做的时候,它只是进入一个无限循环-使用
eall

不会抛出任何错误。只要文件存在,就应该运行循环,而不是只要它不存在(如果您有一个唯一的文件名,这将是永久的)。换成

} while(file_exists($filename));

这是错误的做法。您应该使用确保以原子方式创建文件的函数


php有非常有用的函数,但不幸的是,它不能只添加前缀而不是后缀(例如,如果你想创建一个临时的.html),是的,这是真的。如果您对目录的内容拥有完全控制权(您应该这样做),则可以将生成的文件用作锁。因此,您1)生成文件randxyz 2)检查randxyz.html是否不存在3)创建randxyz.html 4)删除randxyz。如果第2点失败(这真的很糟糕!),请删除生成的文件并重试。