PHP scandir():如何防止回声'。'和' ..'目录?

时间:2018-01-13 21:31:17

标签: php scandir

在PHP中遇到有关scandir()函数的一些问题。

当尝试回显当前目录中的文件列表时,它会将...作为目录回显。我试图像这样过滤掉这些:

<?php

$dir = "pages";
if ($d = scandir($dir)) {
    foreach ($d as $value) {
        echo("<script>console.log(\"$value\")</script>");
        if ($value !== '.' || $value !== '..') {
            echo("<p><a href=\"$dir/$value\">$value</a></p>");
        } else {
            echo("");
        }
    }
}

我觉得很明显,我错过了。

有没有人有任何想法?

-R

5 个答案:

答案 0 :(得分:1)

根据documentationscandir()返回目标目录中的文件和目录数组。所以你可以使用array_diff,它最终将返回一个数组,其中包含第一个数组中第二个数组中不存在的所有条目:

array_diff(scandir($directory), ['..', '.']);

或者,如果你太懒,那么你实际上可以array_shift前两个元素:

$dir = "pages";
if($d = scandir($dir)) {
    array_shift($d);
    array_shift($d);
    ...
}

答案 1 :(得分:1)

我喜欢这样做:

axis([0.1 150])

这样,它会从 $dir = "pages"; if($d = scandir($dir)) { foreach($d as $file){ if(substr($file,0,1) == '.') continue; echo "$file\n"; } } 开始跳过所有$file,例如.等。

但是我的项目中有很多这样的东西:

.htaccess

答案 2 :(得分:0)

我会使用is_file()。它也会避免目录。

chmod 775 /magento/app/code/vendorname/modulename -R

答案 3 :(得分:0)

只需在找到...

后继续循环播放

只需在foreach块的第一行添加:

if($value == '.' || $value == '..') continue;
# your rest of codes

OR

if(in_array($value, array(".",".."))) continue;
# your rest of codes

答案 4 :(得分:0)

你的代码中的

if ($value !== '.' || $value !== '..') {

当$ value等于&#34;。&#34;那肯定不等于&#34; ..&#34;同时,所以&#34; ||&#34;的一面。对于&#34;。&#34;,对#34; ..&#34;总体结果将是真实的。

你需要:

if ($value !== '.' && $value !== '..') {

if ($value == '.' || $value == '..') continue;