PHPの質問です。

getimagesize()を使ったところ、以下のようなエラーメッセージが出てきました。

Warning: getimagesize(../data/upload_img/F1000005.JPG ) [function.getimagesize]: failed to open stream: Invalid argument in C:\Program Files\Apache Group\Apache2\htdocs\****\****\****.php on line 69

****.php の69行目にgetimagesize($変数A)があるのですが、
それが読み込めないということでしょうか?

$img_data = getimagesize($変数A);
if($img_data[0] - $img_data[1] <= 0){
print('<img src="'.$変数A.'" height="160px" />');
}elseif($img_data[1] - $img_data[0] <= 0){
print('<img src="'.$変数A.'" width="160px" />');
}

縦画像、横画像であっても、同面積で表示されるようにしようと考えたのですが、最初のエラーメッセージと、縦長横長関係なく、高さ160pxの画像が表示されるという状態になっています。
なぜ、エラーメッセージが出てしまうのかどなたかご教授ください。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2008/10/01 18:41:57
  • 終了:2008/10/03 17:56:03

回答(3件)

id:unau No.1

ゆーの回答回数7ベストアンサー獲得回数02008/10/01 19:59:06

ポイント27pt

あまり PHP に詳しくないものですが、エラーメッセージを見る限りでは、PHP の関数 getimagesize() で

画像ファイルが読めていないように見えます。

可能性としては、権限の問題なども考えられますが、「$変数A」

(中身は「../data/upload_img/F1000005.JPG」と推察致します)を URL 上のパスと、サーバ上のファイルパス

両方に使っているのが根本的な問題かもしれません。

たとえば、

define( UPLOAD_IMAGE_DIR, 'C:/Program Files/Apache Group/Apache2/htdocs/data/upload_img/' );

define( UPLOAD_IMAGE_PATH, '/data/upload_img/' );

などとして、

$変数B = 'F1000005.JPG';

$image_path = UPLOAD_IMAGE_PATH . $変数B;

$img_data = getimagesize(UPLOAD_IMAGE_PATH . $変数B);

if($img_data[0] - $img_data[1] <= 0){

print('<img src="'.$image_path.'" height="160px" />');

}elseif($img_data[1] - $img_data[0] <= 0){

print('<img src="'.$image_path.'" width="160px" />');

}

と利用し、 URL 上のパスとサーバ上のファイルパスを明示的にわけるのはいかがでしょうか。

そのほうが間違いが減るのではないかと思います。

URL はダミー(私のはてなダイアリー)です。http://d.hatena.ne.jp/unau/

ご参考になればいいですが。もし、見当違いの回答であったら申し訳ありません。

id:AKI-NAMI

質問内容で、getimagesize()でエラーが出る理由の回答を求めていますので、

期待内容ではありませんでした。

ご回答ありがとうございます。

2008/10/01 21:52:00
id:pahoo No.2

pahoo回答回数5960ベストアンサー獲得回数6332008/10/01 21:23:14

ポイント27pt

そのエラーメッセージは、そのスクリプトが設置してあるところから相対パス指定で "../data/upload_img/F1000005.JPG" が存在しないことを意味しています。

すなわち、"C:\Program Files\Apache Group\Apache2\htdocs\****\data\upload_img\F1000005.JPG" が存在していないか、さもなければPHPが解釈できない特殊な画像ファイル形式かもしれません。ご確認ください。


また、getimagesize関数でエラーが出ているため、それ以降の処理は期待したとおりの動きをしません。

id:AKI-NAMI

そこにファイルはあります。

あるので、で画面上では期待通りの形ではありませんが、表示されます。

通常のデジカメでのファイルで、F1000005.jpg は例で、他ファイルでも同様です。

2008/10/01 21:45:21
id:HYU-GA No.3

HYU-GA回答回数1ベストアンサー獲得回数02008/10/02 10:11:43

ポイント26pt

推測での回答になります。

「Invalid argument」ということで、getimagesize()の呼び出しに失敗しています。

なので、

$img_data[0]も$img_data[1]も値が入っていないため、

($img_data[0]-$img_data[1] <= 0) が常に真となり

常に縦長の画像が表示されていると思われます。

getimagesize()の呼び出し前あたりに、

var_dump($変数A);と記述してみて、

$変数Aの中身を確認してみてください。

$変数Aの型がStringでないとないと思われます。

getimagesize()リファレンス

http://jp2.php.net/getimagesize

id:AKI-NAMI

gettype()で取得した内容ではstringとでました。

またstrvalでstring変換しても同様の結果でした。

権限の問題でしょうか。

localhostではエラーが出て、レンタルサーバではエラーが吸収されているのか、

メッセージは出ずに、画像の表示が縦長横長画像共に縦160pxとなってしまっています。

権限の問題であれば、

そこまでの回答を頂きたいです。

2008/10/02 17:03:29

コメントはまだありません

この質問への反応(ブックマークコメント)

トラックバック

  • 2008-10-03 HYU-GAの日記 2008-10-03 13:31:25
    question:1222854115 追加回答したいけど、一人一回答までだから、できない。。 ということで、ここに書くけど、、読んでもらえるかなぁ。 エラーメッセージ Warning: getimagesize(../data/upload_img/F100
「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません