2012-04-30 7 views
0

だから私は読書を通過し、PHPドキュメント経由でPHPのファイルへの書き込み、私はかなり理解していなかった例がありますよ:PHP読書ディレクトリ

http://php.net/manual/en/function.readdir.php

端に向かって、それは一例を示している場合.または..今まで読んされるものの場合

<?php 
if ($handle = opendir('.')) { 
    while (false !== ($entry = readdir($handle))) { 
     if ($entry != "." && $entry != "..") { 
      echo "$entry\n"; 
     } 
    } 
    closedir($handle); 
} 
?> 

:このような?

答えて

3

readdir APIは、すべてのディレクトリに対して繰り返しを呼び出します。したがって、現在のディレクトリ( "."と表示されます)をループすると、無限ループに入ります。また、親ディレクトリ( ".."と表示されます)に対する反復処理は、リストを現在のディレクトリとその下に制限するのを避けます。

希望に役立ちます。

+0

oh okですので、 'readdir( '。')'と書いてみてください。だから、もし私が 'readdir( 'test_directory')'のようなディレクトリを宣言すれば、どちらの場合も実行しません。 –

+0

@ tomhallamの応答を見てください。これがUnixのファイルシステムにある方法です。たとえば、を参照してください。 – g13n

0

UNIXファイルシステムでは、...は私が知る限り、看板のようなものです。とにかく、このPHP関数には確かです。

それを保存しておくと、奇妙な結果(無限ループなど)が発生します。

0

In * nix。現在の作業ディレクトリであり、..はディレクトリの親ディレクトリです。しかし、ファイルやディレクトリの前に '。'私は、次のようなものを好む隠されたと考えられている:

... 
if ($entry[0] !== '.') { 
    echo "$entry\n"; 
} 
... 

これはあなたが無限ループ現在のディレクトリしないこと、ディレクトリツリー「UP」に解析していないことを保証し、かつ任意の隠しファイルその/フォルダは無視されます。

+0

phpはcppベースの言語なので、$ entry [0]を使って最初の文字をより素早く取得できます。 –

1

PHPを使用してディレクトリを読みたい場合は、scandir関数を使用することをお勧めします。以下はscandirのデモンストレーションです

$path = __DIR__.'/images'; 
$contents = scandir($path); 
foreach($contents as $current){ 
    if($current === '.' || $current === '..') continue ; 
    if(is_dir("$path/$current")){ 
    echo 'I am a directory'; 
    } elseif($path[0] == '.'){ 
    echo "I am a file with a name starting with dot"; 
    } else { 
    echo 'I am a file'; 
    } 
} 
関連する問題