我在以下代码中使用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中读取空白文件名。
答案 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()错误。检查你的代码。