• ベストアンサー

ディレクトリー内のファイル更新日の表示

abc/cgi-bin/image/123.jpg abc/cgi-bin/image/124.jpg abc/cgi-bin/image/125.jpg 上記のフアイルの更新日を表示したいのです下記のコードで実行するとエラーになります <?php $dname = dir ( "./cgi-bin/image/" ); while ( $datafile = $dname->read() ) { print "date("Y/m/d H:i:s", filemtime($datafile))\n"; } ?> よろしくお願いします。

  • PHP
  • 回答数3
  • ありがとう数1

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

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

問題は3点 (1)相対パスが命題とちがう。abcはどうなったの? (2)保険でwhileでまわすときにはfalseと厳密なチェックをする ファイル名「0」などでループがおわってしまうため (3)クォーテーションの使い方がおかしい <?php $dname = dir ( "./abc/cgi-bin/image/" ); while ( false !== ($datafile = $dname->read()) ) { print date("Y/m/d H:i:s", filemtime($datafile))."\n"; } ?>

hana3090
質問者

補足

回答ありがとう 下記のコードで実行したのですがエラーになります <?php $dname = dir ( "./abc/cgi-bin/image/" ); while ( false !== ($datafile = $dname->read()) ) { print date("Y/m/d H:i:s", filemtime($datafile))."\n"; } ?> よろしくお願いします

その他の回答 (2)

  • mpro-gram
  • ベストアンサー率74% (170/228)
回答No.3

$dname->read() で返ってくるのは、ファイル名のみ、現在カレントからのパスではありません。 filemtime() の検索対象カレントは、実行中のカレントディレクトリーなので、下位ディレクトリー内のファイルは、その下位ディレクトリー名を追加してやらないと検索出来ません。 $dname->path でそれを取得できるので、 filemtime( $dname->path .'/' . $datafile) とすればよいでしょう。

hana3090
質問者

お礼

>filemtime() の検索対象カレントは、実行中のカレントディレクトリーなので、下位ディレクトリー内のファイルは、その下位ディレクトリー名を追加してやらないと検索出来ません。 何回も回答ありがとう、 上記のコメントで解決できました。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

で、エラーメッセージは?

hana3090
質問者

補足

<?php $dname = dir ( "./cgi-bin/image/" ); while ( false !== ($datafile = $dname->read()) ) { print date("Y/m/d H:i:s", filemtime($datafile))."\n"; } ?> エラーメッセージは 2012/01/02 08:09:34 2011/12/31 12:18:04 Warning: filemtime() [function.filemtime]: stat failed for 1001.jpg in C:\miwaku99\kousinndata.php on line 4 1970/01/01 09:00:00 Warning: filemtime() [function.filemtime]: stat failed for 1015.jpg in C:\miwaku99\kousinndata.php on line 4 よろしくお願いします。

関連するQ&A

  • ディレクトリ内のファイル名の取得

    ディレクトリを読んでディレクトリに有る画像ファイル $dname = dir ( "./cgi-bin/image/" ); while ( false !== ( $imagefile = $dname->read() )) { } 拡張子を除いたファイル名を取得したい abc.jpg dfg.jpg xyz.jpg abc dfg xyz 宜しくお願いします。

    • ベストアンサー
    • PHP
  • ディレクトリ内のファイル

    下記はディレクトリ内のファイルを表示するコードです <?php $file = dir ( "./cgi-bin/image/" ); while ( false !== ($ifile = $file->read()) ) { print "$ifile<BR>\n"; } ?> 下記の一行めと二行めの 『.』 『..』 のフアイルが在るように表示されます この二つのファイルはエクスポローラで見ても表示されません 削除したいのですがよろしくお願いします。 . .. 1001.jpg 1015.jpg 1018.jpg 1019.jpg 1022.jpg 1023.jpg 1025.jpg

    • ベストアンサー
    • PHP
  • ファイル一覧表示で、ディレクトリを非表示

    ディレクトリ内の画像ファイルの一覧を表示させたいです。 検索したところ、以下の物を発見しました。 #!/usr/bin/perl $filename=$ENV{QUERY_STRING}; $lookdir = "../../image/event/"; $mime{html}="text/html"; $mime{htm}="text/html"; $mime{txt}="text/plain"; $mime{jpg}="image/jpeg"; if($filename eq '') { print "Content-type: text/html\n\n"; print "<html><body>\n"; opendir(DIR,"../../image/event/"); while($dir=readdir(DIR)) { print "<a href=\"$lookdir$dir\">$dir</a><br>\n"; } closedir(DIR); print "</body></html>\n"; } else { $ext=$filename; $ext=~s/.*\.//g; if($mime{$ext} ne '') { print "Content-type: $mime{$ext}\n\n"; open(R,$filename); print <R>; close(R); } } これで、ほぼOKなのですが、"."や".."が表示されてしまってます。 これを消したいのですが、良い方法は無いでしょうか?

    • ベストアンサー
    • Perl
  • HTMLのファイルにCGI処理結果を表示する

    まずトップページはhtmlで作ります。 そのトップページにいつも変化する所があるのでcgiで処理を施したものをhtmlに貼り付けたいと思っています。 その場合に例えば画像を出力させる場合は <IMG src="cgi-local/top.cgi"> で指定し、 #!/usr/local/bin/perl print "Content-type: image/jpeg\n\n"; open FH,"<../image.jpg"; binmode FH; binmode STDOUT; print while(<FH>); close FH; をやれば動かせますが、これを画像ではなくhtmlを表示させるためには print "Content-type: image/jpeg\n\n"; を print "Content-type: text/html\n\n"; に変更する事により可能だと思いやってみたのですが、うまく出力できませんでした。 cgi処理をうまくhtmlに貼り付ける方法があるのでしょうか。どうか教えて頂けないでしょうか?お願します。(涙)

    • ベストアンサー
    • CGI
  • デレクトリーの画像フアィルのフアィル名の変更

    下記はデレクトリー./image/$files/にある全ての画像フアィルを読み込んだ番号順にフアィル名を変更したいのですがよろしくお願いします。 opendir(DIR,"./image/$files/"); @dirs = readdir(DIR); close(DIR); foreach(@dirs) { if ( $_ eq '.' || $_ eq '..' ) { next; } $abc++; print "$abc\n"; print "$_\n"; rename ("./image/$_","./image/$abc.jpg"); } exit;

    • ベストアンサー
    • Perl
  • フォルダの画像一覧

    下記の画像一覧のcgiを下位フォルダをリンク表示して下位フォルダにも進んでいけるようにしたいのですが、どのようにしたらよいでしょうか。下記も教えていただいたものを利用している素人です。よろしくお願いいたします。 $width_height = 'WIDTH=40 HEIGHT=55'; $dir = './'; #################### print "Content-type: text/html;CHARSET=x-sjis\n\n"; print "$dir の jpg一覧<P>\n"; print "<TABLE BORDER>\n"; print "<TR><TH>イメージ<TH>ファイル名<TH>サイズ(k)\n"; opendir(DIR, "$dir"); while ($_ = readdir(DIR)) { if (substr($_,-4,4) eq "\.jpg") { # jpgだけ出力 ($size) = (stat("$dir/$_"))[7]; # ファイルサイズ所得 print "<TR>"; print "<TD><A HREF=\"$dir/$_\" TARGET=\"jpg\"><IMG SRC=\"$dir/$_\" $width_height></A>"; # 画像(リンクあり) print "<TD><A HREF=\"$dir/$_\" TARGET=\"jpg\">$_</A>"; # ファイル名(リンクあり) print "<TD ALIGN=RIGHT>$size\n"; # サイズ } } closedir(DIR); print "</TABLE>\n"; exit:

    • ベストアンサー
    • Perl
  • 一番大きいファイルを探し出すCGI…が動かない!

    ホームページ作成中です。 以前ここで「あるフォルダ内に連番のhtmlファイルが自動作成され(1.html,2.html~~)、その中で一番数が大きいファイルを表示するCGI」というのを質問させていただきました。 その後すぐ回答が来て、なんとCGIを作っていただいたんです。で、試しに使ってみると(5~6枚くらい)、無事新しい方(数が多い方)を読み込んでくれていたので、感謝の気持ちと共に質問を解決させていただきました。 しかし、後になって問題が発生しました。 桁が上がると、新しい物を表示してくれないのです。 9.html,10.htmlがあると、9htmlの方を表示してしまうんです。 ソースは以下の通りですが、どこを変えることで2桁、3桁と対応可能でしょうか?自動生成するCGIに0001.htmlというように吐き出させればいいのかもしれませんが、そうする技術も無いので… よろしくお願いします。 ------------------------------------- #!/usr/bin/perl $DIR = "./se3_diary/"; $new = 0; opendir(DIR,$DIR); while ( $file = readdir(DIR) ) { if ( $file =~ /^(\d)+\.html$/ ) { $new = $1 if ( $new < $1 ); } } closedir(DIR); open(IN,"$DIR$new.html"); $src = join("",<IN>); close(IN); print "Content-Type: text/html\n\n"; print $src; exit();

    • ベストアンサー
    • CGI
  • PHPでディレクトリのファイルをソート表示させる

    こちらのサイトを参考にして、PHPでディレクトリのファイルを表示させる プログラムを作りました。→ http://php.eweb-design.com/0206_di.php --------------------------------------------- <?php $rep = 1; // 最終更新日(表示=1 非表示=0) $sze = 1; // ファイルサイズ(表示=1 非表示=0) $lst = "./list"; // 表示するリストの名前(パス) $drc=dir($lst); print("<OL>"); while($fl=$drc->read()) { $lfl = $lst."/".$fl; $din = pathinfo($lfl); if(is_dir($lfl) && ($fl!=".." && $fl!=".")){ print("<LI>".$din["basename"]."<FONT size='-1'> (ディレクトリ)</FONT></LI>"); } else if($fl!=".." && $fl!=".") { print("<LI>"); print("<a href=".$lst."/".$fl.">".$fl."</a>"); // ファイル更新日 if($rep == 1 || $sze == 1) print("<FONT size='-1'> ("); if($rep == 1) echo date("m/d",filemtime($lfl)); if($rep == 1 && $sze == 1) print(", "); // ファイルサイズ if($sze == 1) echo round(filesize($lfl)/1024)."KB"; if($rep == 1 || $sze == 1) print(")</FONT> "); print("</LI>"); } } print("</OL>"); $drc->close(); ?> --------------------------------------------- しかし、ファイルがソートされていません。 どの様にしたらファイル名でソートして表示できるのでしょうか? 申し訳ありませんが、ご教示お願いします。

  • ファイル名の変更

    下記はデレクトリーabcのjpg画像ファイル名を(数字.jpg) 読み込み順に(1.jpg)に変更するコードですが,エラーになります、 #!"C:\perl\bin\perl.exe" opendir(DIR,"./abc/"); # デレクトリopen @DATA = grep /\.jpe?g/i, readdir(DIR); # デレクトリread @SDATA = sort { $a cmp $b } @DATA; # ソート for ($k=0; $k<=@SDATA; $k++) { $new = $k.'.jpg'; rename ("$SDATA[$k]", "$new"); } closedir(DIR); exit; よろしくお願いします。

    • ベストアンサー
    • Perl
  • ディレクトリ内の最新の画像のみ表示したい。

    ディレクトリファイルから画像ファイルの更新日時を取得して、 拡張子を問わず、最新の画像のみ表示させたいのですが、 うまく出来ません。ご教授お願いします。 ~・~・~・~・~・~・~ <?php $dir = @opendir("****"); while($file = readdir($dir)) { $kaku = substr($file, -3, 3); if($kaku=="jpg" || $kaku=="gif" || $kaku=="png"){ $cnt++; $last = date("ymdHis", filemtime($file)); $img="$last$file"; $filename[$cnt]=$file; } } closedir($dir); } arsort($img); $img_file= substr($img, 12); $cnt=0; foreach($img_file as $value){ $cnt++; if ($cnt<=1){ echo "<img src=\"$value\">"; } } ?>

    • ベストアンサー
    • PHP

専門家に質問してみよう