Laravel GLOB 公共路径

0 glob path laravel

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

    $images = [];

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

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

小智 5

Laravel glob 函数返回一个数组,其中包含它找到的文件的绝对路径。重要的是要记住,您也需要在参数中传递绝对路径

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

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

$images = File::glob(public_path() . '/img/uploads/*.*');
Run Code Online (Sandbox Code Playgroud)

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

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

使用数组映射而不是 foreach:

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

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