提问人:DaddyGa 提问时间:3/28/2022 最后编辑:Sankalpa WijewickramaDaddyGa 更新时间:3/28/2022 访问量:70
PHP scandir() 从其他文件调用时不起作用
PHP scandir() don't work when is called from other file
问:
我有问题,当我尝试从使用它的类调用方法不起作用时,witch 意味着它看不到任何目录。scandir()
scandir()
这是文件中的方法./Core.php
class Core
{
public function availableControllers()
{
$dir = scandir(__DIR__);
$count = count($dir);
$i = 0;
$availableControllers = array();
while ($i < $count) {
if (is_dir($dir[$i]) && $dir[$i] !== ".." && $dir[$i] !== ".") {
array_push($availableControllers, $dir[$i]);
}
$i++;
}
return $availableControllers;
}
我在(方法使用./Engine/ControllerLoader.php
controllerValid()
avalibleControllers()
)
<?php
include __DIR__ . "/../Core.php";
class ControllerLoader
{
public function load()
{
$Core = new Core;
$URI = ControllerLoader::explodeURI();
$controller = $Core->controllerValid($URI[0]);
$object = $Core->objectsValid($controller , $URI[2]);
$controllerFullName = $controller."Controller";
if( ControllerLoader::includeControllerFile() !== false && (isset($URI[1]) && is_int($URI[1])) )
{
ControllerLoader::includeControllerFile();
call_user_func("$controllerFullName::monitor");
}
elseif( ControllerLoader::includeControllerFile() !== false && $object !== false && (is_int($URI[3]) || !isset($URI[3])) )
{
ControllerLoader::includeControllerFile();
call_user_func("$controller::$object", [$URI[3]]);
}
else
{
return false;
}
}
当我从文件运行方法时工作正常,但是当它 -> 使用它时它不起作用(它返回空数组())。有什么想法吗?avilableControllers
Core.php
ControllerLoader
load()
答:
0赞
ikyuchukov
3/28/2022
#1
根据PHP的手册:
__DIR__
文件的目录。如果在 include 中使用,则返回包含文件的目录。这相当于 。此目录名称没有尾部斜杠 除非它是根目录。dirname(__FILE__)
https://www.php.net/manual/en/language.constants.magic.php
如果调用了 availableControllers(),则 将是 Core.php 文件的目录。scandir()
您也可以通过使用要使用的方法来检查是否在正确的文件夹中。var_dump(__DIR__)
评论
0赞
DaddyGa
3/28/2022
我发现问题是is_dir()。当我删除 is_dir($dir[$i]) 时一切正常,但我不明白为什么会出现这个问题。
0赞
ikyuchukov
3/28/2022
您希望包含作为文件的控制器,但您正在检查它们是否是目录。由于它们不是目录,因此您的检查失败,
0赞
DaddyGa
3/28/2022
它正在搜索女巫在控制器内部的目录,感谢任何关注。
评论
__DIR__
在第二种情况下,可能没有指向你所期望的位置。