我的应用程序在IIS上运行,物理目录结构如下所示:
C:\inetpub\wwwroot\myApplication\index.php
C:\inetpub\wwwroot\myApplication\includes\myfunctions.php
C:\inetpub\wwwroot\myApplication\includes\import_data\users\
最后一个文件夹包含978个.cgi文件,我正在尝试从中读取数据。
index.php
包含includes/myfunctions.php
,并调用其中的一个方法 - CheckForUsersToImport()
,其定义如下:
function CheckForUsersToImport()
{
$usersDir = "import_data/users/";
$globRes = glob($usersDir . "*.cgi");
var_dump($globRes);
echo "End CheckForUsersToImport();";
}
当我在浏览器中导航到localhost/myApplication/index.php
时,我得到了这个输出:
array(0){}结束CheckForUsersToImport();
我尝试将第二行代码更改为$globRes = glob("*.cgi");
,但这会产生完全相同的输出。
我找到this question,但接受的答案对我不起作用。
我试过了:
$usersDir = "./import_data/users/";
$usersDir = "/import_data/users/";
$usersDir = "import_data/users/";
但是所有3都给了我与上面代码完全相同的输出。
如何在正在执行的函数下面的两个级别的目录中获取扩展名为".cgi"
的所有文件?
编辑:
我更新了我的功能如下:
function checkUserData()
{
$usersDir = "import_data/users";
$globRes = scandir($usersDir);
}
运行时,我得到以下输出:
[phpBB Debug] PHP警告:在第5行的文件[ROOT] /includes/myfunctions.php中:scandir(import_data / users,import_data / users):系统找不到指定的路径。 (代码:3)
[phpBB Debug] PHP警告:在第5行的文件[ROOT] /includes/myfunctions.php中:scandir(import_data / users):无法打开dir:没有这样的文件或目录
[phpBB Debug] PHP警告:在第5行的文件[ROOT] /includes/myfunctions.php中:scandir():(错误2):没有这样的文件或目录
为什么在第一个错误中寻找scandir(import_data/users,import_data/users)
?这根本不是我通过的 - 或者至少,不是我认为我通过的 - scandir()
!
答案 0 :(得分:1)
考虑到您的错误消息表明您正在使用phpBB,应用程序可能必须在代码执行之前更改当前工作目录,并且您的相对路径在PHP当前正在执行的地方无效。
您可以检查工作目录以查看它是否确实是您的文档根目录或其他地方:
echo getcwd();
尽可能指定磁盘上任何文件或目录的完整路径。在这种情况下,我可能会使用__DIR__
常量引用定义该函数的脚本所在的目录:
$usersDir = __DIR__ '/import_data/users/';