• ベストアンサー

フォルダ内の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
  • 回答数2
  • ありがとう数2

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

  • ベストアンサー
  • wp_
  • ベストアンサー率54% (132/242)
回答No.2

is_dirではなくfile_existの間違いではないですか? >if (!is_dir($data)) { >if (!file_exists($dir_name."/".$data)) { たまに出ると言うのが不可解ですが。

参考URL:
http://php.mirror.camelnetwork.com/manual/ja/function.is-dir.php
hirofuji
質問者

お礼

原因がいまひとつ分かりませんが自己解決しました。 有難うございました(_ _)

その他の回答 (1)

  • SAYKA
  • ベストアンサー率34% (944/2776)
回答No.1

http://de3.php.net/manual/ja/function.readdir.php ときどき「false」が帰ってきてるとか「./」も取得してしまっているとかなんじゃないのかなぁ? $dataを正しく検査してからpushすべきじゃないかと思うけどどう?

hirofuji
質問者

お礼

原因がいまひとつ分かりませんが自己解決しました。 有難うございました(_ _)

関連するQ&A

  • 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
  • フォルダ内のファイル名を取得して配列にぶち込みたいです

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

    • ベストアンサー
    • 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
  • フォルダ内のファイル名取得の仕方が分かりません

    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); ?> "."と".."をはぶいたファイル名だけを取得したい場合にはどうすればよいのでしょうか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • rmdirでフォルダが消せません

    rmdirでフォルダ(フォルダ1)とその中のフォルダ(フォルダ2)を削除したく思っています。 それでまずフォルダ2をrmdirで削除しました。 ここまでは成功するのですが 次にフォルダ1を削除しようとすると Directory not empty のエラー文が出てしまいます。 確認してみたところフォルダ1の中はフォルダ2がしっかり削除されていて空でした。 何か特別な手続きを踏まないといけないのでしょうか? php文を載せておきます。 どなたか助けてください。 $o_dir=opendir("./up/".$1."/"); rmdir("./up/".$1."/".$2); //これは削除できているようです closedir($o_dir); $o_dir=opendir("./up/"); rmdir("./up/".$1); closedir($o_dir);

    • ベストアンサー
    • 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
  • CGIがある場所以外のディレクトリの内容表示方法

    ディレクトリ内にあるファイルの一覧を表示しようとしていますがうまく出来ません。 ---------------- opendir(DIR, "./"); @dir_value = readdir(DIR); closedir(DIR); ---------------- この状態だともちろんですが、CGIがあるディレクトリの一覧を表示します。(この状態で、表示する部分のプログラム(ソース?)が間違っていないことはわかります) この1つ下(同ディレクトリ内に「img」ディレクトリ作成)の内容を表示したいのですが、うまく出来ません。 単純に、 ---------------- opendir(DIR, "./img"); @dir_value = readdir(DIR); closedir(DIR); ---------------- と、してみましたがファイルを表示しません。 他にも、「./img/」または絶対パス(/home/~~)でもだめでした。 下または上のディレクトリを参照するのには上記変更だけでは出来ないのでしょうか? 方法がありましたらお願いします。

    • ベストアンサー
    • CGI
  • 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('.');

  • フォルダの中身を知りたい

    opendir dir , $FORM{'user'}; @dir_file = readdir(dir); だったところを $open_folder = "../../img/cgi-bin/uploader/" . $FORM{'user'}; opendir dir , $open_folder; @dir_file = readdir(dir); というようにしました。 こうするとフォルダの中身が表示されません。 $img = $open_folder . "/ファイル名.gif"; print "<IMG SRC='$img'><BR>\n"; としたところ、きちんと絵が表示されました。 ※ファイル名は存在するファイルの名前をコピーして貼り付けました。 どうすればフォルダの中身を表示できるようになるのでしょうか?

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

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

    • ベストアンサー
    • Perl

専門家に質問してみよう