【问题标题】:Laravel GLOB public pathLaravel GLOB 公共路径
【发布时间】:2023-12-22 02:12:01
【问题描述】:

在 Laravel 中,我想从一个目录中获取所有图像,只是在获取公共文件夹的路径时遇到了问题。

    $images = [];

    foreach(File::glob('/public/img/uploads/*.*') as $filename) {
        $images[] = $filename;
    }

如果我使用这个函数它什么都不返回,我也尝试使用 public_path() 但这会返回完整路径,包括我的 F:// 目录。

【问题讨论】:

    标签: laravel path glob


    【解决方案1】:

    Laravel glob function 返回一个数组,其中包含它找到的文件的绝对路径。请务必记住 you need to pass the absolute path in the argument too

    在您的情况下,由于您想在公用文件夹中查找文件,您可以按照@Marcin Orlowski 的建议使用public_path() 帮助程序来获取所需的绝对路径;如果您想在不同的位置进行搜索,可以使用其他助手。

    因此,在代码中调用 glob 的正确方法是以下行:

    $images = File::glob(public_path() . '/img/uploads/*.*');
    

    但是,您可能不需要绝对路径,只需要相对于公用文件夹的路径。在这种情况下,您可以使用the basename function 摆脱绝对路径并添加您想要的路径部分:

    $images = [];
    foreach (File::glob(public_path() . '/img/uploads/*.*') as $filename) {
        $images[] = '/img/uploads/' . basename($filename);
    }
    

    使用 array map 而不是 foreach:

    $images = array_map(function($filename) {
        return '/img/uploads/' . basename($filename);
    }, File::glob(public_path() . '/img/uploads/*.*'));
    

    注意:Laravel Glob 是 PHP glob() function 的包装器。

    【讨论】:

      【解决方案2】:

      我只是在获取公用文件夹的路径时遇到问题。我也尝试使用 public_path() 但这会返回完整路径,包括我的 F:// 目录。

      它是manual reads

      base_path()
      获取到根目录的完全限定路径 应用程序安装。

      config_path()
      获取配置的完全限定路径 目录。

      public_path()
      完全合格的路径公之于众 目录。

      存储路径()
      获取存储的完全限定路径 目录。

      '/public/img/uploads/*.*'
      

      我怀疑您的公共目录是否在您的根文件夹中,这就是您使用的 absolute path 指向的内容,因此请使用 public_path() 返回的内容 - 完全合格的路径没什么可打扰的。

      【讨论】: