Scandir相对于包含文件的路径吗?

Scandir相对于包含文件的路径吗?

问题描述:

我在一个文件中包含以下代码,其中包含到需要此信息的其他页面的主机中。Scandir相对于包含文件的路径吗?

$directory_list = scandir("../packages"); 
$known_directories = [ 
    ".", 
    ".." 
]; 
$unknown_directories = $result = array_diff($directory_list, $known_directories); 

当我直接打开包含此代码的文件时,它完美地工作。但是,该文件需要能够通过包含在所述文件中而将该信息提供给其他文件。看起来scandir正在相对于INCLUDED这个代码的文件的路径上运行。

无论包含此文件的位置如何使用包含文件的路径?

尝试添加dirname(__FILE__)到您的路径进入scandir

$directory_list = scandir(dirname(__FILE__)."/../packages"); 
$known_directories = [ 
    ".", 
    ".." 
]; 
$unknown_directories = $result = array_diff($directory_list, $known_directories); 

因为__FILE__描述here

__FILE__的完整路径,并解决符号链接的文件的文件名应该工作。如果在包含内使用,则包含文件的名称是 返回。

你甚至可以__DIR__

__DIR__文件的目录代替dirname(__FILE__)。如果在include中使用,则返回包含文件的目录 。这相当于 dirname(__FILE__)。除非目录名是根目录,否则此目录名没有尾部斜杠 。