PHP / Laravel文件存在验证无效

时间:2017-06-07 02:30:45

标签: php laravel

我有一个带有多个文件输入的<form>,用于将这些文件存储到服务器中。文件的名称必须遵循数字标准,这就是我在存储之前重命名它们的原因。每个帖子都有一个ID,可以有多个文件,所以模式是:post-id + dash和数字+文件扩展名,这样,如果同一帖子有两个文件具有相同的扩展名,短划线+号码将避免他们被覆盖了。所以,在我存储文件之前,我运行一个循环来找到名称的正确数字。问题是,验证文件存在的函数似乎不应该返回true。代码:

$counter = 0;
do{
  $nomeArquivo = $post->id . "-{$counter}"  . "." . $arq->extension();

  $counter++;
//these commented are other ways of verification I tried
//}while(Storage::exists($nomeArquivo));
//}while(file_exists("/storage/" . $nomeArquivo));
}while(is_file("/storage/" . $post->id . "-{$counter}"));

Storage::putFileAs('/public', $arq, $nomeArquivo);

上面的代码在foreach($files as $arq)内部运行,其中$files是表单输入中的文件。

参考:https://laravel.com/docs/5.4/filesystemhttps://laravel.com/api/5.4/Illuminate/Filesystem/Filesystem.html

3 个答案:

答案 0 :(得分:1)

使用文件外观检查文件是否存在:

文件::存在($ MYFILE)

http://laravel-recipes.com/recipes/123/determining-if-a-file-exists

答案 1 :(得分:1)

如果文件名只有,那么,

您可以像这样给出唯一名称:

$file = $request->file('file');
$extension = $file->getClientOriginalExtension(); 
$destination ='/files/';
$filename = uniqid() . '.' . $extension;
$file->move($destination, $filename);

现在在数据库中保存上面的文件名。希望它可以帮到你

答案 2 :(得分:0)

当用户@ fubar在评论中指出时,我引用了错误的路径来验证文件是否存在。我将while条件更改为while(\File::exists(public_path() . '/storage/' . $nomeArquivo))并且效果很好。感谢