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

时间:2018-09-23 21:45:04

标签: php relative-path scandir

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

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

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

通过搜索其他问题可以解决单点和双点问题,但是我看不到没有点的正斜杠帖子。

3 个答案:

答案 0 :(得分:2)

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

如果您说./tmp,则要查找的目录是/var/www/tmp

如果您说/tmp,那么您正在寻找/tmp(从根开始)

答案 1 :(得分:2)

也许您是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()调用它,还是从其他目录中调用它。

答案 2 :(得分:-1)

  • /表示服务器的 root 目录。与/var/www/中一样。
  • ./表示脚本在其中执行的当前目录。这等效于 getcwd() 。例如,您当前在/php/scripts中,它将指向/var/www/php/scripts
  • ../表示父文件夹,可以链接以向上移动多个级别。

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

如果您尝试从/var/www/tmp访问/var/www/php/scripts/script.php,则可以使用以下任一方法:

  • ../../tmp
  • /tmp

请注意,如果不确定要“升级”多少级,则可以添加无限数量的../;它不会“脱离”根源。话虽如此,直接从根引用通常更直接。