包含时相对于文件路径的Scandir


Scandir relative to the path of file when included?

我在一个文件中有以下代码,该文件包含在许多需要这些信息的其他页面中。

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

当我直接打开包含此代码的文件时,它可以完美地工作。然而,该文件需要能够通过被包括在所述文件中而将该信息提供给其他文件。似乎scandir在一个相对于包含此代码的文件的路径上运行。

无论该文件包含在何处,我都将如何使用包含文件的路径?

尝试将dirname(__FILE__)添加到scandir:的路径中

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

它应该工作,因为这里描述了__FILE__

__FILE__已解析符号链接的文件的完整路径和文件名。如果在include中使用,则包含文件的名称为返回。

你甚至可以用__DIR__ 代替dirname(__FILE__)

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