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

こんにちは
Apache2.2、php5を使用しています。
ブラウザに画像を表示させたいのですが、URLで直接画像ファイルを指定するとファイルの場所を見せてしまうので、非公開のディレクトリの画像を表示させるようにphpのプログラムを呼び出して(引数をファイル名)にしています。
画像が「X」の状態で表示されません。(涙

header('Content-Type: ' . 'image/jpeg');
header('Content-transfer-encoding: binary');
header('Content-length: ' . filesize(/.../../$fileName));
header('Content-Disposition: attachment; filename="' . $fileName . '"');

のあとで、fopen() ->> fpassthru();で処理したのですが、小さい画像ファイルは処理は終わっていますが、「X」の状態で表示されて、大きい画像ファイルを指定するとfpassthru()の中で死んでしまいます。
fread ->> print ->> flush()ループで処理すると、flushの中で死んでしまいます。
error.logにも特に情報が残っていないので...

何かご存知の方はいらっしゃいませんか?
よろしくお願いします。

A 回答 (2件)

>ご指摘頂いたのHeaderは修正しましたが、画像は「X」の状態で...


>URLでファイルを指定するといまくいくのですが...

画像を吐き出すPHPファイルのURLを、ブラウザのアドレスバーに直接入力した場合はうまくいくけれども、そのURLをHTML内のimgタグのsrc属性に指定した場合はダメということでしょうか?

そうであれば、単なるHTMLの書き間違えか、PHP内でリファラーで何か処理を変えているくらいしか思いつきません。

この回答への補足

>URLでファイルを指定するといまくいくのですが...
これは、URLでファイルを指定するといまくいくが、PHPで吐き出すとうまくいかないって意味で書きました。
分かりにくくてすいません。

phpで吐き出す前に、セキュリティ関係の処理phpを呼んでいたので、その処理の前で強引にfile_get_contents( )するとうまくいく事がわかりました。いまだに本当の原因は判明しておりませんが、あとはなんとかなると思います。
お騒がせして申し訳ありませんでした。fdsjaklfjasさんの過去の回答も参考にさせて頂きました。
たいへんありがとうございました。

補足日時:2006/12/09 21:02
    • good
    • 0

ヘッダの設定が怪しいと思います。



header('Content-length: ' . filesize(/.../../$fileName));
→ご質問の問題の原因はコレだと思います。パスがおかしくないですか? Content-Lengthヘッダが0になりませんか?

header('Content-transfer-encoding: binary');
→HTTP1.1では廃止されていますし、一般的には付けないと思います。

header('Content-Disposition: attachment; filename="' . $fileName . '"');
→このケースでは、このヘッダはいらないと思います。

>fopen() ->> fpassthru();
readfile関数だと一行ですみますよ。せっかくPHP使っているのだったら、ラクしないと損です。

この回答への補足

回答ありがとうございます。
質問の書き方がわるくて申し訳ありません。
header('Content-length: ' . filesize(/.../../$fileName));
これは、実際には正常にファイルを記述しています。

ご指摘頂いたのHeaderは修正しましたが、画像は「X」の状態で...
URLでファイルを指定するといまくいくのですが...

file_get_contents( )やreadfile( )に変えると処理は正常に終了するようになりました。
でも、画像は「X」の状態から変わらないのです...

補足日時:2006/12/09 15:51
    • good
    • 0

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