Mát*_*ger 4 php storage file exists laravel
我正在 Laravel 中使用 Fpdi 修改上传的 pdf。pdf 生成完美,我可以在任何文件资源管理器中看到它。但是 Laravel 内置的 Storage::exists() 返回 false。这是一个非常奇怪的错误,因为 php file_exists 方法可以完美地找到具有相同路径的文件,以及 File::exists
我完全没有主意了。任何帮助,将不胜感激!
src 变量由 Storage::path() 创建
$src = Storage::path("notes/".$this->note->id."-downgraded.pdf");
Storage::disk('public')->exists($src); //this returns false
file_exists($src); //this returns true
File::exists($src) //this returns true
Run Code Online (Sandbox Code Playgroud)
我假设您的 laravel 项目使用默认的 laravel 文件系统配置。
如果您使用Storage:disk('public'),则该磁盘上的根目录与Storage:path().
这意味着您实际上是$src从一个磁盘检索并检查其是否存在于完全不同的磁盘上。
如果您Storage在没有磁盘的情况下使用,则将使用默认磁盘。默认情况下,它是local,因此
$src是这样的:/my-project/storage/app/notes/some.pdf。
(请参阅./config/filesystem.php检查您的实际磁盘和默认配置)
您像这样检查了存在性:Storage::disk('public')->exists($src)。这意味着您在公共磁盘上
查找。
公共磁盘的根目录一般为/my-project/storage/app/notes/some.pdf/my-project/storage/app/public。
这意味着存在方法实际上是在检查是否存在
/my-project/storage/app/public/my-project/storage/app/notes/some.pdf。我认为这不是您期望发生的情况。
您的存在检查应如下所示:
# public disk root-directory is configured this:
# /my-project/storage/app/public
# file is actually here:
# /my-project/storage/app/public/notes/some.pdf
$src = "notes/some.pdf"
Storage::disk('public')->exists($src);
Run Code Online (Sandbox Code Playgroud)
使用Storage根本不需要您知道文件的绝对路径。如果使用得当,您甚至根本不需要关心文件的位置。
我强烈建议阅读此处的手册:https ://laravel.com/docs/master/filesystem