PHP scandir 不起作用

PHP scandir doesn't work

我看到另一个问题有同样的问题,但只有 1 个答案,对我没有用。

问题:PHP scandir - multiple directories

我正在使用 Joomla!创建我的网站 (我用模板创建所有东西,大多数我不明白创建扩展)。

因此,我在主文件夹中创建了文件夹 pbfData。 我在其中创建了文件夹 users。但是 scandir 没有检测到任何这些。

错误(没有 if (is_dir)

Warning: scandir(/pbfData/) [function.scandir]: failed to open dir: No such file or directory in [...]/pbf/index.php on line 61

Warning: scandir() [function.scandir]: (errno 2): No such file or directory in [...]/pbf/index.php on line 61

Fatal error: Cannot access empty property in [...]/pbf/index.php on line 61

代码如下所示:

class users {

  var $users;

  function refUsers() {
    $dir = '/pbfData/';
    if (is_dir($dir)) {
      $this->$users = scandir($dir);
    } else {
      echo "<b>CRITICAL ERROR: </b>No access to users directory.";
    }
  }
[...] }

输出 CRITICAL ERROR: No access to users directory.

(注意: 添加 is_dir 来解决它是对另一个问题的回答,但正如我所写的那样,它对我不起作用。)

您正在检查文件夹 /pdfData/ 是否存在,并且由于路径以 / 开头,您真正要检查的是您的文件夹中是否有名称为 pdfData 的文件夹ROOT 文件夹(windows 中的 C:\D:\ [etc],以及 linux/unix 中的 /

这意味着如果你 运行 你的脚本 /var/www/html/pdf/index.php,如果你有文件夹 /var/www/html/pdf/pdfData - 函数 is_dir('/pdfData/') 将 return false,因为您的 ROOT/

中没有该文件夹
Folder structure
----------------
/pdfData/ <-- This is the folder that your code check (which doesn't exists)
/var/
/var/www/
/var/www/pdf/
/var/www/pdf/pdfData/ <-- This is the folder you want to check for

如果您想检查当前文件夹中的文件夹 pdfData,您 运行 从中获取代码,您应该使用 $dir = 'pbfData/';(没有起始斜线)

另一种选择是使用 __DIR__ 魔法常量:

$dir = __DIR__ . '/pbfData/';

is_dir 不是获取目录路径的解决方案,它只是检查文件是否是目录。要获取路径,您可以在 Joomla 中使用 JPATH_SITE 或 JPATH_BASE 等。 Joomla 已经带有内置常量。看看这里 https://docs.joomla.org/Constants .

您的代码将是

$dir = JPATH_BASE."/pbfData",