gpt4 book ai didi

PHP scandir 在 Laravel 中失败

转载 作者:搜寻专家 更新时间:2023-10-31 21:08:12 27 4
gpt4 key购买 nike

因此,我试图将目录传递给使用 PHP 的 scandir 的 Laravel 应用程序中的模型函数,但它似乎无法找到该目录。我提供给 scandir 的字符串/路径是 /staffportal/public/public/documents/ra_docs/。我最终尝试提供给 scandir 的目录是 ra_docs。这是目录结构(> 表示目录):

 >staffportal
>public
>documents
>ra_docs
>app
>bootstrap
>vendor

为了完整起见,这里是我正在运行的函数。

public static function directoryToArray($directory)
{
$result = array();

$currentDirectory = scandir($directory);
foreach ($currentDirectory as $key => $value)
{
if(!in_array($value, array(".","..")))
{
if (is_dir($directory . DIRECTORY_SEPARATOR . $value))
{
$result[$value] = dirToArray($directory . DIRECTORY_SEPARATOR . $value);
}
else
{
$result[] = $value;
}
}
}

return $result;
}

有什么想法吗?

最佳答案

如果我稍微更改一下您的代码,将 public static function directoryToArray 更改为 function dirToArray,以匹配在函数,该函数按我预期的方式工作。

问题要么是不一致,要么是您传递给它的内容。我将从后者开始。

首先,正如 The Shift Exchange 的评论中提到的,您将 public/public 作为字符串的一部分传递,而您在问题中显示的目录结构没有这样的一条路。

其次,您传递的是绝对路径。 PHP 正在尝试打开根目录 / 中的目录 staffportal,因为字符串以 / 开头。但大概 staffportal 目录并不直接位于您的文件系统根目录中。

从您的目录结构看来,staffportal 是您的 Laravel 应用程序的根目录。您可以通过 Laravel 内置的 base_path 辅助函数(参见 the Laravel docs )获得路径。或者,由于您要查找的目录位于 public 中,因此您可以使用为您提供直接路径的函数,public_path(来自相同的文档)。

尝试像这样传递路径:

dirToArray(public_path() . '/documents/ra_docs')

(如果您担心可移植性并希望匹配函数的样式,则可以使用 DIRECTORY_SEPARATOR 代替斜杠。)

不过,我想您确实希望该函数成为模型中的静态函数。因此,如果您实际上正确地传递了路径并且上述方法没有帮助,则错误可能出在您尝试通过调用 dirToArray 进行递归的函数中 - 这应该是 self::directoryToArray 因为您已将其声明为类的静态函数。

关于PHP scandir 在 Laravel 中失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28638366/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com