アプリ版:「スタンプのみでお礼する」機能のリリースについて

初心者です。わかりにくいかもしれませんがよろしくお願いします。

特定のディレクトリにある画像ファイルをすべて取得して
サムネイル表示しようとしています。
画像サイズを取得するのに、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)

別の階層の画像サイズは取得できないのでしょうか。
それとも方法が間違っているのでしょうか。

A 回答 (3件)

readdir()はディレクトリエントリを返すだけですので、opendir()で指定したパスが含まれる事をありません。



エラーメッセージ「getimagesize(aisatu.gif)」から、分かるかと。
    • good
    • 0
この回答へのお礼

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

お礼日時:2005/04/21 16:23

#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を含めるような
癖をつけておくと良いかもしれません。
    • good
    • 0
この回答へのお礼

お忙しいところ、詳しいご説明をありがとうございました。
表示させるのを画像だけにするため、何とか試行錯誤して以下のようにしてみました。

$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()の出力結果を見ると、確かにファイルパスと一緒に"."と".."が出てきたので気になっていたのですが、
調べてもわかりませんでした。
申し訳ありませんが、よろしくお願いします。

お礼日時:2005/04/21 16:39

"." と ".." は、それぞれ、カレントディレクトリと親ディレクトリとなります。


詳しくは、以下の参照ページをご覧下さい。

# 尚、Windowsでは"dir /a"とする事で、
# "ls -la"と同様な結果を得る事が出来ます。

参考URL:http://www.ipe.tsukuba.ac.jp/~muto/uxdir.html
    • good
    • 0
この回答へのお礼

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

お礼日時:2005/04/21 19:43

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!