• ベストアンサー

getimagesizeを使う場合

初心者です。わかりにくいかもしれませんがよろしくお願いします。 特定のディレクトリにある画像ファイルをすべて取得して サムネイル表示しようとしています。 画像サイズを取得するのに、getimagesize関数を使いますが、 //対象ディレクトリ $opdir = "./"; //img2ディレクトリ $dir = opendir($opdir); while( ($ent = readdir($dir)) !== false ) { $str = strstr($ent,"."); $imginfo = getimagesize($ent,$image_info); var_dump($imginfo); } こんな感じで、同一の階層にある画像はサイズがきちんと取得できるのですが、 //対象ディレクトリ $opdir = "../"; //img1ディレクトリ のように、別階層のディレクトリを指定すると、 エラー表示になってしまいます。 エラー内容 Warning: getimagesize(aisatu.gif): failed to open stream: No such file or directory in C:\Program Files\Apache Group\Apache2\htdocs\test\img1\img2\img.php on line 27 bool(false) 別の階層の画像サイズは取得できないのでしょうか。 それとも方法が間違っているのでしょうか。

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

  • ベストアンサー
  • unimentai
  • ベストアンサー率70% (34/48)
回答No.2

#1 の方の補足になりますが、 『getimagesizeに渡すパラメータにはファイルへのPATHも含めましょう』 という事です。 具体的には以下のようにして下さい。 <?php $opdir = "./"; $dir = opendir($opdir); while( ($ent = readdir($dir)) !== false ) { if ( $ent != "." && $ent != ".." ) { $ent = "$opdir$ent"; $imginfo = getimagesize($ent,$image_info); var_dump($imginfo); } } ?> getimagesizeに限らず、ファイルを扱う際には必ずPATHを含めるような 癖をつけておくと良いかもしれません。

noname#15456
質問者

お礼

お忙しいところ、詳しいご説明をありがとうございました。 表示させるのを画像だけにするため、何とか試行錯誤して以下のようにしてみました。 $kaku = array(".gif",".jpg",".png");//表示させるファイルの拡張子 while( ($ent = readdir($dir)) !== false ) { $str = strstr($ent,"."); if (array_search($str,$kaku) !== false ) { $ent = $opdir . $ent; $imginfo = getimagesize($ent,$image_info); これで何とか思い通りに動いてくれました。 ありがとうございます。 そしてとても申し訳ないのですが、もう一つとんでもなく無知な質問をしてもよろしいでしょうか。 if ( $ent != "." && $ent != ".." ) { の、"." と ".." というのは、何を表しているのでしょうか。 read()の出力結果を見ると、確かにファイルパスと一緒に"."と".."が出てきたので気になっていたのですが、 調べてもわかりませんでした。 申し訳ありませんが、よろしくお願いします。

その他の回答 (2)

  • unimentai
  • ベストアンサー率70% (34/48)
回答No.3

"." と ".." は、それぞれ、カレントディレクトリと親ディレクトリとなります。 詳しくは、以下の参照ページをご覧下さい。 # 尚、Windowsでは"dir /a"とする事で、 # "ls -la"と同様な結果を得る事が出来ます。

参考URL:
http://www.ipe.tsukuba.ac.jp/~muto/uxdir.html
noname#15456
質問者

お礼

そういうことだったんですね。 ありがとうございます。 勉強になりました。

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.1

readdir()はディレクトリエントリを返すだけですので、opendir()で指定したパスが含まれる事をありません。 エラーメッセージ「getimagesize(aisatu.gif)」から、分かるかと。

noname#15456
質問者

お礼

ありがとうございます。 まだちょっとよく飲み込めてません。 もう少し勉強してみます。