人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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の画像が表示されるという状態になっています。
なぜ、エラーメッセージが出てしまうのかどなたかご教授ください。


●質問者: AKI-NAMI
●カテゴリ:ウェブ制作
✍キーワード:.jpg Apache GROUP ON open
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● ゆーの
●27ポイント

あまり 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/

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

◎質問者からの返答

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

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

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


2 ● pahoo
●27ポイント

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

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


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

◎質問者からの返答

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

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

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


3 ● HYU-GA
●26ポイント

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

「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

◎質問者からの返答

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

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

権限の問題でしょうか。

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

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

権限の問題であれば、

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ