php - 尽管文件存在,但 laravel 存储存在返回 false

标签 php laravel file storage exists

我正在 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

最佳答案

我假设您的 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)
这意味着您在公共(public)磁盘上寻找 /my-project/storage/app/notes/some.pdf
public-disk的根目录一般是/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);

使用Storage 根本不需要您知道文件的绝对路径。如果使用得当,您甚至根本不需要关心文件的位置。

我强烈建议阅读此处的手册:https://laravel.com/docs/master/filesystem

关于php - 尽管文件存在,但 laravel 存储存在返回 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66991887/

相关文章:

php - 什么时候应该使用存储过程

php - 使用 API PUT 请求上传文件

php - 我们如何在laravel中使用外键将数据从一个表插入到另一个表?

laravel - 如何在 laravel 中使用 php 爆炸?

找不到邮件的 Laravel 类

android - 如何以编程方式写入 Android 中的 DocumentFile?

javascript - 如果 php echo 内容为空则隐藏 div

php - 获取数组中的下一个元素 (PHP)

java - java中按文件名对文件进行分组

android - 我的视频和 pdf 文件是否受到安全保护?