ホームページ >バックエンド開発 >PHPチュートリアル >PHPでディレクトリを走査する方法、ディレクトリを走査するためのPHP非再帰アルゴリズムの例

PHPでディレクトリを走査する方法、ディレクトリを走査するためのPHP非再帰アルゴリズムの例

WBOY
WBOYオリジナル
2016-07-25 08:51:29925ブラウズ
  1. function myscandir($pathname){
  2. foreach( glob($pathname) as $filename ){
  3. if(is_dir($filename)){
  4. myscandir($filename.'/*' );
  5. }else{
  6. echo $filename.'
    ';
  7. }
  8. }
  9. }
  10. myscandir('D:/wamp/www/exe1/*');
  11. ?>
コード

2 をコピーします。

  1. function myscandir($path){
  2. $mydir=dir($path);
  3. while($file=$mydir->read()){
  4. $p=$path .'/'.$file;
  5. if(($file!=".") AND ($file!="..")){
  6. echo $p.'
    ';
  7. }
  8. if( (is_dir($p)) AND ($file!=".") AND ($file!="..")){
  9. myscandir($p);
  10. }
  11. }
  12. }
  13. myscandir(dirname(dirname( __FILE__)));
  14. ?>
コードをコピー

2. PHPディレクトリトラバーサル関数opendirの使い方

opendir()関数の機能: ディレクトリ ハンドルを開きます。関数が正常に実行されると、一連のディレクトリ ストリーム (一連のディレクトリ文字列) が返されます。失敗すると、先頭に「@」を追加できます。エラーを隠す機能

構文構文: opendir(ディレクトリ,コンテキスト)パラメータ

パラメータ:説明

説明: ディレクトリはストリーミングするディレクトリを指定します。 必須パラメータはディレクトリ オブジェクトを指定し、オプション パラメータは処理する必要があるディレクトリ オブジェクトのコンテキストを指定します。このコンテキストには、テキスト ストリームの表示モードを変更できる一連のオプションが含まれます。

コード:

  1. $dir = "./";
  2. // 既知のディレクトリを開き、その内容の読み取りに進みます
  3. if (is_dir($dir))
  4. {
  5. if ($dh = opendir($dir)) {
  6. while (($file = readdir($dh)) !== false) {
  7. echo "ファイル名: $file : ファイルタイプ: " . filetype($dir . $file) . "."
    ";
  8. }
  9. closedir($dh);
  10. }
  11. }
  12. ?>
PHP では、ディレクトリ内のすべてのファイルをリストするコードを再帰的に実装する必要はありません
コード:

/** * ディレクトリ内のすべてのファイルをクエリするための PHP 非再帰実装

* @param known $dir

* @return multitype:|multitype:string
*/
function scanfiles($dir) {
    if (! is_dir ( $dir ))
  1. return array ();

  2. < ;p> // すべてのオペレーティング システムと互換性があります
  3. $dir = rtrim ( str_replace ( '\', '/', $dir ), '/';

  4. / スタック、デフォルト値は渡されたディレクトリです

  5. $dirs = array ( $dir );

  6. // すべてのファイルを配置するコンテナ

  7. $rt = array ();

    ;
  8. do {

  9. // スタックをポップします
  10. $dir = array_pop ( $dirs );

  11. // ディレクトリをスキャンします

  12. $tmp = scandir ( $dir );< ;/p> ;
  13. foreach ( $tmp as $f ) {

  14. // フィルタ..
  15. if ($f == '.' || $f == '..')
  16. 続く;
  17. // 現在の絶対パスを結合します
  18. $path = $dir . $f;
  19. // ディレクトリの場合は、スタックにプッシュします。
  20. if (is_dir ( $path )) {
  21. array_push ( $dirs, $path . '/' );
  22. } else if (is_file ( $path )) { // ファイルの場合はコンテナに入れます
  23. $rt [ ] = $path;
  24. }
  25. }

  26. } while ( $dirs ) // スタックにディレクトリがなくなるまで

  27. rt;

  28. }< ;/p>
  29. コードをコピー
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。