• ベストアンサー

フォルダ内のファイル名取得の仕方が分かりません

Apache2.0.47、PHP4.3.2で使用しています。 フォルダ内のファイル名の取得を以下のように書いています。 (scandirは使えませんでした) <?php $dir = "test_dir"; $dh = opendir($dir); while (false !== ($filename = readdir($dh))) { $files[] = $filename; } sort($files); print_r($files); ?> "."と".."も取得されるので、以下のように変更したのですが同じ結果でした。 <?php $dir = "test_dir"; $dh = opendir($dir); while (false !== ($filename = readdir($dh))) { if(filename!=". "){ if(filename!=".. "){ $file[] = $filename; } } } sort($files); print_r($files); ?> "."と".."をはぶいたファイル名だけを取得したい場合にはどうすればよいのでしょうか? よろしくお願いします。

  • wipe
  • お礼率81% (100/122)
  • PHP
  • 回答数3
  • ありがとう数8

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

ちゃんと動作してファイル名を取得できているとして、 質問の回答としては以下のようにするとできます。 while (false !== ($filename = readdir($dh))) { if(!is_dir($filename)){ $file[] = $filename; } }

wipe
質問者

お礼

回答ありがとうございました。 お礼が遅くなりすいません。 $filename==".."ではなく、!is_dir($filename)を使えば良かったのですね。 "."や".."が!is_dirで対処できることも分かりました。 ありがとうございました。

その他の回答 (2)

  • lesbrers
  • ベストアンサー率48% (23/47)
回答No.2

余計な空白が入っています。 ". "、".. "  ~   ~ あと修正すべきは、変数に$を付けるのと、変数名の間違いですね。

wipe
質問者

お礼

回答ありがとうございました。 お礼が遅くなりすいません。 printで表示すると空白も表示されるので必要なものと思っていました。 変数の$はうっかりしていました。 変数の間違いというのは何か分かりませんでした。 とりあえず動くようになりました。 ありがとうございました。

  • gentaro
  • ベストアンサー率47% (105/221)
回答No.1

このソース、エラーになりませんか?(^^; 正解を書くとスキルアップにならないと思いますのでヒントを 1)PHPの配列をもう少し勉強 2)変数名には先頭に$が必要(これはプロでも時たまやらかしますね) などです。頑張りましょう

wipe
質問者

お礼

回答ありがとうございました。 お礼が遅くなりすいません。 配列の確認をしました。知識不足でした。 変数名の$、うっかりしてました。 改めてソースを見直して不具合に気づいたのですが、不思議とエラーにはなってなかったです。 (こういうのが、かえって嫌な不具合です) ありがとうございました。

関連するQ&A

  • フォルダ内のファイル名を取得して配列にぶち込みたいです

    こんにちは。 フォルダ内ファイル名を一覧にして表示させることまでは出来ますが、 この一覧表示されたファイル名を配列に入れるにはどうしたらよいでしょうか。 <?php $dir = "sample/"; // ディレクトリの内容を読み込みます。 if ($dh = opendir($dir)) { while (($file = readdir($dh)) !== false) { echo "filename: " . $file . "<br />\n"; } closedir($dh); } ?> ご教示宜しくお願い致します。

    • ベストアンサー
    • PHP
  • PHPのopendir関数って・・・。

    <?php $dir = "/etc/php5/"; // 既知のディレクトリをオープンし、その内容を読み込みます。 if (is_dir($dir)) { if ($dh = opendir($dir)) { while (($file = readdir($dh)) !== false) { echo "filename: $file : filetype: " . filetype($dir . $file) . "\n"; } closedir($dh); } } ?> 上の例の出力は、たとえば以下のようになります。 filename: . : filetype: dir filename: .. : filetype: dir filename: apache : filetype: dir filename: cgi : filetype: dir filename: cli : filetype: dir とありますが、 filename: . : filetype: dir filename: .. : filetype: dir は何もフォルダになくても出ますよね? これは何ですか??

    • ベストアンサー
    • PHP
  • ファイル名を取得できない

    次のようなソースでディレクトリ内のファイル名を取得しようとしています。 $dh=opendir("."); while(($entry=readdir($dh))){ if(is_file($entry)){ print $entry."<>"; } } closedir($dh); このソースを、取得したいディレクトリ内で動かすとまったく問題ないのですが、ディレクトリのパスを1個上の階層などから相対パスで指定すると、.phpファイルと.htmlファイルは取得するのですが、ほかのファイル名は取得されなくなってしまいます。 何かphp.iniなどで設定があるのでしょうか。 回避方法がありましたら是非ご教授ください。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • フォルダ内のTXTファイル一覧表示

    opendir(DIR,"./"); while($bbb=readdir(DIR)) { print "<a href=\"$bbb\">$bbb</a><br>\n"; } closedir(DIR); で、取得するファイルをTXTに限定したいと思っています。 どのように追加すればいいかご存知の方がいましたら 教えて下さい。

    • ベストアンサー
    • Perl
  • perl ディレクトリ ツリー表示

    下記ソースコードでカレントディレクトリのツリー表示ができますが、これを特定のディレクトリ内をツリー表示できるようにする方法がわかりません。 opendir関数の$dirの前にtestをつけましたが、うまく行きません。 特定のディレクトリは任意で変えることができることとします。 sub treelist_ { my ($dir, $lv) = @_; opendir my $dh, $dir; my @files = grep { $_ !~ /^\.\.?$/; } readdir $dh; closedir $dh; for my $file (@files) { print ">" x $lv, "$dir/$file\n"; treelist_("$dir/$file", $lv+1) if -d "$dir/$file"; } } sub tree { for my $dir (@_) { print "$dir\n"; treelist_($dir, 0); } } tree('.');

  • readdirでのファイル名取得

    readdir()にて、textファイルのみ取り出すにはどのようにすれば良いのでしょうか? 現状は、後処理で、/txt|TXT/でマッチさせています。 opendir(DIR,"./DATA/"); @file=readdir(DIR); closedir(DIR); foreach $myfilename(@file){ if($myfilename=~/txt|TXT/){ print "$myfilename\n"; #確認用 } } よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • PHPでディレクトリ名のみ表示する方法が知りたいです。以下のプログラム

    PHPでディレクトリ名のみ表示する方法が知りたいです。以下のプログラムで「test」というディレクトリ内のファイル一覧(ディレクトリ名とファイル名)を表示するようにしているのですが、この中からディレクトリ名のみ表示させたいのですがどのようにすればいいのでしょうか? よろしくお願いします。 <?php if ($dir = opendir("test/")) { while (($file = readdir($dir)) !== false) { if ($file != "." && $file != "..") { echo "$file<br>\n"; } } closedir($dir); } ?>

    • ベストアンサー
    • PHP
  • phpでランダムにページを表示

    001.html~999.htmlの内容をランダムにPHPを使用しページを 表示させたいのですが以下のソースでは01.html表示になり 困っています。 <?php $dir_name = "ads"; $ads = array(); $dh = opendir($dir_name); while ($data = readdir($dh)) { if (!is_dir($data)) { array_push($ads, $data); } } closedir($dh); shuffle($ads); include("$dir_name/$ads[0]"); ?> どのようにすれば001になるのでしょうか、 どなたかご教示お願い致しますm(_ _)m

    • ベストアンサー
    • PHP
  • フォルダ内のHTMLにランダムに飛ばす

    以下のソースでadsフォルダ内にあるhtmlファイルを ランダムに呼び出しているのですが 実行をすると正常に表示をするときと ページが真っ白で何も表示しないときがあり困っています。 どなたかどこに問題があるか分かる方宜しければ 教えて頂けないでしょうか。 宜しくお願い致します<(_ _)> (ソース) <?php $dir_name = "ads"; $ads = array(); $dh = opendir($dir_name); while ($data = readdir($dh)) { if (!is_dir($data)) { array_push($ads, $data); } } closedir($dh); shuffle($ads); include("$dir_name/$ads[0]"); ?> (プログラムの目的) adshuffle.phpにアクセスするとadsフォルダ内にあるhtmlを ランダムに読み込む。 (階層) |_adshuffle.php |_ ads  |_ 001.html  |_ 002.html  |_ ・  |_ ・  |_ ・  |_ 999.html *最終的な目的は999までhtmlを増やしていく予定です。

    • ベストアンサー
    • PHP
  • readdirで文字化け

    Smartyでファイル情報を取得するシステムを作ろうと思ってます。 まずあるフォルダ直下のフォルダ、ファイルを取得しようと思い、 下のようなものを作りました。 $dir = "./"; $data = array(); if(($dh = opendir($dir)) == true){  while(false !== ($file = readdir($dh))){   $data[] = $file;  }  closedir($dh); } $this->set('data',$data); このような感じで、tplのdataに配列の結果を出力しようと思ってますが、 $dir直下のフォルダまたはファイルが日本語だと文字化けしてしまいます。 どこかで、文字コードの設定が必要なのかな?と思ってますが それをどこですべきなのか?どのようにすべきなのかがわかりません。 わかる方がいらっしゃいましたら、どうぞ教えていただきたいと思います。

    • ベストアンサー
    • PHP

専門家に質問してみよう