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

3
我需要能够使用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 没有抛出任何错误。

2个回答

10

应当在文件存在的情况下运行循环,而不是在不存在的情况下运行(如果您有一个唯一的文件名,这将永远持续下去)。请将其更改为

} while(file_exists($filename));

1

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

PHP 有 tempnam 函数。


非常有用的函数,但不幸的是只能添加前缀而不能添加后缀(例如,如果您想创建一个临时的 .html 文件)。 - Gonzalo Cao
是的,没错。如果您对目录内容有完全控制权(应该是这样),您可以使用生成的文件作为锁定文件。因此,您需要执行以下步骤:1)生成randxyz文件2)检查randxyz.html是否存在3)创建randxyz.html 4)删除randxyz。如果第2点失败(真的非常不走运!),请删除生成的文件并重试。 - Riccardo Galli

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接