【问题标题】:PHP scandir doesn't workPHP scandir 不起作用
【发布时间】:2016-07-21 15:48:31
【问题描述】:

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

【问题讨论】:

  • 您正在设置$dir = '/pbfData/',然后检查is_dir($directory),然后执行scandir($dir),因此如果$directory 是您正在从$dir 读取的有效目录,这可能不是有效的目录。
  • 您能否链接不起作用的答案并解释原因?
  • @apokryfos 我没看到,但即使没有 is_dir 检查它也没有用。
  • 根据您的代码,我将假设“/pbfData/”不是目录。这也是一条看起来很奇怪的绝对路径。也许你打算做类似__DIR__."/pbfData/" 的事情?

标签: php joomla scandir


【解决方案1】:

您正在检查文件夹 /pdfData/ 是否存在,并且由于路径以 / 开头,因此您真正检查的是您的 ROOT 文件夹中是否有一个名为 pdfData 的文件夹(C:\ 或 @ 987654325@ [etc] 在 windows 中,/ 在 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/';

【讨论】:

    【解决方案2】:

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

    您的代码将是

    $dir = JPATH_BASE."/pbfData",
    

    【讨论】:

    • 有效!谢谢!但是仍然存在致命错误:无法访问第 61 行 [...]/pbf/index.php 中的空属性。我不确定这是什么意思,但我要搜索它...
    • @Soaku 如果您可以创建一个不同的问题并发布您的代码。我也许可以帮助你。您可以查看此链接 1.stackoverflow.com/questions/2715610/… 和 2.stackoverflow.com/questions/20437751/…。这可能会对您有所帮助。
    • 哦...现在我知道我做错了什么...我不敢相信我写的是$this-&gt;$users而不是$this-&gt;users
    • @Soaku 是的,这是错误的。轻微但致命。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-15
    • 2011-10-24
    相关资源
    最近更新 更多