我编写了这个简单的脚本,将目录中的所有文件显示为一组按钮。
此代码从上传目录中读取并显示表单中提交按钮内的所有文件。
$handle = opendir("upload");
echo '<form name="form" method="post" action="download.php">';
while($name = readdir($handle)) {
echo '<input type="submit" name="file" value='.$name.' />';
}
echo '</form>';
现在这个问题是;每次我运行脚本时,我会在开头找到两个按钮.
和..
我无法弄清楚导致此问题的原因。
答案 0 :(得分:3)
您遇到的是文件系统使用的两个特殊文件。
.
代表您当前所在的目录。 1
..
代表当前目录的父目录。 2
的脚注:强>
1。诸如“/ my_dir /././././././ file”之类的路径相当于“/ my_dir /文件“
2. 诸如“/ my_dir /../ my_dir /../ my_dir / file”之类的路径相当于“/ my_dir / file “,因为..
会让你”向上“移动一个级别。
要解决向用户展示这两个内容的问题,请使用以下内容过滤readdir
返回的内容:
while ($name = readdir ($handle)) {
if ($name == '.' || $name == '..')
continue; /* don't echo anything, skip to next read */
echo '<input type="submit" name="file" value='.$name.' />';
}
答案 1 :(得分:0)
目录列表包括。对于当前目录和...为父目录。
我通常使用PHP手册中的内容(http://php.net/manual/en/function.readdir.php)
if ($handle = opendir('.')) {
while (false !== ($entry = readdir($handle))) {
if ($entry != "." && $entry != "..") {
echo "$entry\n";
}
}
closedir($handle);
}
所以你需要做的是排除。和..来自输出。
答案 2 :(得分:0)
另一种解决方案是使用像这样的FilesystemIterator:
foreach(new FilesystemIterator('upload') as $file){
echo $file;
}
会自动跳过。和..文件系统中的条目。