PHP 列出目录文件(不是文件夹)不显示具有 3 个字符文件类型>例如 docx


PHP list directory files (not folders) not displaying files with > 3 character filetype e.g docx

这里的 php 初学者。我希望你们能提供帮助,这是我使用的代码:

$path = 'K:'_Intranet'General Documents';
$dir = opendir($path);
while (($file = readdir($dir)) !==   false) 
{
    if($file != "." && $file != "..") 
    {
        if (substr($file, -4, -3) ==".")
        {
            echo "<li> <a target='_blank' href='$path/$file'>$file</a><br>";
        }
    }
}
closedir($dir);

基本上,我如何让它也显示具有 4 个字符文件类型的文件,例如 docx 或 xlsx?

我试过使用它,但它似乎仍然不起作用:

elseif (substr($file, -4) ==".")
            {
                echo "<li> <a target='_blank' href='$path/$file'>$file</a><br>";
            }

帮助将不胜感激:)

以下内容应该适合您; 正如 Danny 的评论所说,您可以简单地检查指定的路径是否解析为文件(而不是目录)。

$path = 'K:'_Intranet'General Documents';
$dir = opendir($path);
while (($file = readdir($dir)) !==   false) 
{
    if (is_file($file))
    {
        echo "<li> <a target='_blank' href='$path/$file'>$file</a></li>";
    }
}
closedir($dir);

这意味着您不需要特别认识到它具有如此长度的扩展名(如果您正在查看更广泛的文件类型,例如 .vcproj 文件或 .htaccess,这将失败)。用户定义的字符串检查的另一个问题是,如果有多个复合扩展名(如 MyGame.vcxproj.filters)或根本没有扩展名(如自述文件)。在这种情况下(与许多 I/O 功能一样),最好留给语言本身;它们具有更广泛的检测模式,并且通常比自定义实现更具可移植性

我不确定为什么要测试(除非您排除没有扩展名的文件或扩展名长度小于 3 个字符或长度小于 3 个字符或超过 4 个字符的文件)如果您"还显示具有 4 个字符的文件文件类型",但如果您想测试 3 或 4 个字符,您可以更改它 -

if (substr($file, -4, -3) ==".")

到这样的东西

if ((substr($file, -4) ==".") || (substr($file, -5) ==".")) 

第一个条件与具有 3 个字母扩展名的文件上的"."匹配。第二个是带有 4 个字母扩展名的文件。

$path = 'K:'_Intranet'General Documents';
$dir = opendir($path);
while (($file = readdir($dir)) !==   false) 
{
    if($file != "." && $file != "..") 
    {
        $format=end(explode(".", $file));
        if ($format=="docx" || $format=="xlsx")
        {
            echo "<li> <a target='_blank' href='$path/$file'>$file</a><br>";
        }
    }
}
closedir($dir);

感谢您的回复。杰伊·布兰查德,非常感谢你。

$path = 'K:'_Intranet'General Documents';
$dir = opendir($path);
while (($file = readdir($dir)) !==   false) 
{
    if($file != "." && $file != "..") 
    {
        if (substr($file, -4, -3) ==".")
        {
            echo "<li> <a target='_blank' href='$path/$file'>$file</a><br>";
        }
        elseif (substr($file, -5, -4) ==".")
        {
            echo "<li> <a target='_blank' href='$path/$file'>$file</a><br>";
        }
    }
}
closedir($dir);

这就像一个魅力,它现在列出了所有 3/4 扩展名文件类型!

我还完成了仅显示文件夹的代码(这仅在您只有 3/4 扩展名文件类型时才有效):

$path = 'K:'_Intranet'General Documents';
$dh = opendir($path);
while (($file = readdir($dh)) !==   false) 
{
    if($file != "." && $file != "..") 
    {
        if (substr($file, -4, -3) ==".")
        {
            echo "";
        }
        elseif (substr($file, -5, -4) ==".")
        {
            echo "";
        }
        else 
        {
            echo "<img src='pictures/folder.png'></a> <a target='_top' href='$path/$file'>$file</a><br>";
        }
    }
}
closedir($dh);

如果您有扩展名文件类型或多或少的文件,那么就像 Alec 所说的那样,您需要指定每个文件类型。因此,例如,如果您有一个文件类型.db并且您不想列出它的文件,则需要添加另一个:

elseif (substr($file, -3, -2) ==".")
        {
            echo "";
        }

这可能是很长的路要走,但我有点喜欢这种方式,因为您可以更好地控制要显示的内容。