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