当使用readdir返回空字符串时

时间:2013-12-04 16:56:52

标签: php

我在以下代码中使用readdir来获取目录中图像的所有文件名列表。

while (false !== ($entry = readdir($frameDir))){
    $shapeName = explode('.',$entry);
    if (!empty($shapeName[0]) && $shapeName[0] != '.' && $shapeName[0] != '..' &&     $shapeName[0] != '/'){
        $shapeName = $shapeName[0];
        $shapes['frames'][] = $shapeName;
    }

在此代码之后,脚本会附加'.png'以使其成为有效的文件名。

正如您所看到的,我已尝试消除传递空白文件名的任何可能性。虽然当我运行脚本时,我最终得到一个空白目录“/shapes/frame/.png”。这仅适用于此特定目录。当我在三个目录中的另一个上使用代码时,我得到了预期的结果,代码与上面使用的代码相同。

while (false !== ($entry = readdir($frameDotDir))){
    $shapeName = explode('.',$entry);
    if (!empty($shapeName[0]) && $shapeName[0] != '.' && $shapeName[0] != '..' &&     $shapeName[0] != '/'){
        $shapeName = $shapeName[0];
        $shapes['frame_dots'][] = $entry;
    }
}

检查服务器上的文件系统时,我找不到任何空白名称的文件。

我想知道是什么原因导致我的脚本从diretory中读取空白文件名。

3 个答案:

答案 0 :(得分:1)

文件名不能为空(也不能为空)。你在代码中做错了什么。它应该看起来像:

while ($entry = readdir($frameDir)){
    // skip files which names starting with a dot
    // like '.', '..' or hidden files
    if (strpos($entry, '.') !== 0) {
        $shapes['frame_dots'][] = $entry;
    }
}

你看,少即是多了;)

答案 1 :(得分:1)

为什么不使用glob()而不是readdir()。只需给它一个模式,它就可以让你轻松处理文件名,而不是一个一个地执行 扫描工作。在您的情况下,它无法返回空文件名。另外,看看文档中的glob标志,你会惊讶于它的简单性。

glob("*.png");

输出:

Array ( [0] => shape.png, [1] => shape2.png )

答案 2 :(得分:1)

我遇到了与空白文件名相同的问题usind readdir()结果是目录名称错误,原来linux是区分大小写的,在代码中目录名以“I”开头,在linux目录中从“我”开始。

我猜这个错误是由于没有处理opendir()错误。检查你的代码。