/寻址和./寻址有什么区别?

What is the difference between / addressing and ./ addressing?

我正在 PHP 网站上工作,我需要在该网站上获取 Images 目录中的文件列表。 PHP.net 中的示例显示了仅使用正斜杠的寻址,如示例中所示。这种寻址模式不起作用。相反,地址需要以 ./ 开头。有什么区别?

<?php
$dir    = '/tmp';
$files1 = scandir($dir);
$files2 = scandir($dir, 1);

print_r($files1);
print_r($files2);
?>

搜索其他问题解决了单点和双点,但我没有看到关于不带点的正斜杠的帖子。

.表示当前目录。例如,假设您当前的路径是 /var/www:

如果你说./tmp你要查找的目录是/var/www/tmp

如果你说/tmp你正在寻找/tmp(从根开始)

  • / 表示服务器的 root 目录。如 /var/www/.
  • ./ 表示脚本正在执行的 current 目录。这相当于 getcwd().例如,您当前在 /php/scripts,它将引用 /var/www/php/scripts
  • ../表示父文件夹,可以链接上移多级。

每个的使用取决于您试图从哪个脚本操作哪个文件或文件夹。

如果您尝试从 /var/www/php/scripts/script.php 访问 /var/www/tmp,您可以使用:

  • ../../tmp
  • /tmp

请注意,如果您不确定需要多少级别 'move up',您可以添加无限数量的 ../;它不会 'break out' 的根。话虽如此,直接从根引用通常更直接。

也许您是 Windows 用户并且不熟悉 Linux 寻址文件的方式,但本质上没有驱动器号。 / 是文件系统的根,基本上等同于 Windows 上的 C:\(虽然不完全是)。它也适用于 Windows,除了它会引用您的脚本所在的分区的根目录 运行,因为 Windows 将每个分区分隔在不同的驱动器号上。

在文件系统的根目录中有一个名为 tmp 的标准文件夹,如果要引用它,则需要指定完整路径,/tmp

仅使用 tmp./tmp 将引用本地路径上的 tmp 文件夹,这是一个完全不同的文件夹,只是名称相同(甚至可能不存在) ).

当您不想指定完整路径而是指定某个地方的相对路径或本地路径时,您不要将 / 放在开头。你可能什么都不放,或者你可以放 ./ 来明确这是相对于你当前工作目录的路径,即 ..

无论您的脚本在哪个文件夹中运行,. 始终代表它。在大多数情况下实际上不需要放置 ./,因为相对路径是隐式的。

在相关说明中,.. 代表父文件夹。

例如,我的脚本是/var/www/script.php,当我运行它时:

  • . 是文件夹 /var/www.
  • fopen('note.txt', 'r') 将打开文件 /var/www/note.txt 进行阅读。
  • fopen('./note.txt', 'r') 会做同样的事情。
  • .. 是文件夹 /var.
  • ../../tmp 等同于 /tmp.

请注意,即使您 include() 来自子文件夹的脚本,. 表示的当前工作目录仍然保持不变。

这可能会使事情变得混乱,因为 . 可能不是您包含的脚本所在的文件夹。要解决此问题,请使用 __DIR__ 获取您的脚本所在的文件夹,它将获取脚本的当前文件夹,即使您是通过 include() 调用它或从其他目录调用它。