0

ディレクトリ内のすべてのファイルを一連のボタンとして表示するこの単純なスクリプトを作成しました。

このコードは、アップロード ディレクトリから読み取り、送信ボタン内のすべてのファイルをフォームに表示します。

$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>';

ここでの問題は次のとおりです。スクリプトを実行するたびに、最初にコンテンツ...

この問題の原因を突き止めることができませんでした。

4

3 に答える 3

3

遭遇したのは、ファイル システムによって使用される 2 つの特別なファイルです。

  • .現在のディレクトリを表します。1

  • ..現在のディレクトリの親ディレクトリを表します。2

脚注: 1. 「/my_dir/././././././file」 などのパスは、 「/my_dir/file」と同等です2. 「/my_dir/../my_dir/../my_dir/file」などのパスは、 「/my_dir/file」と同等です。これは、1 レベル「上」に移動するためです。
   
    ..


これら 2 つをユーザーに表示する問題を回避するには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.' />';
}
于 2012-07-17T19:13:11.977 に答える
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);
}

したがって、あなたがする必要があるのは、を除外することです。そして..出力から。

于 2012-07-17T19:14:59.270 に答える
0

別の解決策は、次のように FilesystemIterator を使用することです。

foreach(new FilesystemIterator('upload') as $file){
    echo $file;
}

自動的にスキップします。そして..ファイルシステムのエントリ。

于 2012-07-17T19:16:02.780 に答える