PHP scandir不起作用

时间:2016-07-21 15:48:31

标签: php joomla scandir

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

问题: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来解决它是另一个问题的答案,但正如我所写,它对我不起作用。)

2 个答案:

答案 0 :(得分:0)

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

这意味着如果您运行脚本/var/www/html/pdf/index.php,如果您有文件夹/var/www/html/pdf/pdfData,则会发生事件 - 函数is_dir('/pdfData/')将返回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/';

答案 1 :(得分:0)

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

您的代码将是

$dir = JPATH_BASE."/pbfData",