我正在一个PHP网站上工作,我需要在该网站上获取Images目录中的文件列表。 PHP.net中的示例仅以正斜杠显示寻址,如示例中所示。此寻址模式不起作用。相反,该地址需要以./开头。有什么区别?
<?php
$dir = '/tmp';
$files1 = scandir($dir);
$files2 = scandir($dir, 1);
print_r($files1);
print_r($files2);
?>
通过搜索其他问题可以解决单点和双点问题,但是我看不到没有点的正斜杠帖子。
答案 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
请注意,如果不确定要“升级”多少级,则可以添加无限数量的../
;它不会“脱离”根源。话虽如此,直接从根引用通常更直接。