0

先週、ページのimg src値を、画像ファイルを指す値から、PHPスクリプトを使用して画像を提供するように変換しました。主な理由は、ファイルとデータベースBLOBの両方を実際のソースとして収容することでした。

これで、ユーザーがページにアクセスすると、画像が表示される場合と表示されない場合があります。そうでない場合、ページが更新/再読み込みされると、画像が表示されます。画像が表示されない場合は、ユーザーが以前にアクセスした画像である場合があります。

私は困惑しています。

imgタグは次のとおりです。

<img src="../somedir/image_script.php?i=1234">

image_script.phpファイルは、画像の取得元を特定し、次のように終了します。

header("Content-type: image/jpeg");
if($from_db){
    print $image_blob;
} else {
    $im = imagecreatefromjpeg($image_file);
    imagejpeg($im,null,100);
    imagedestroy($im)
}

FastCGIを使用してIIS6でPHP5.2.8を使用しています。image_script.phpファイルにもそのディレクトリにもキャッシュヘッダーはありません。現在、画像の99.9%がファイルベースであるため、dbベースの画像とファイルベースの画像の結果に違いがあるかどうかはわかりません。 。ブラウザでimage_script.phpに直接アクセスすると、要求された画像(i = ????)が100%返されます。

a>画像が表示されているときにヒットとミスが発生する理由についての手がかりはありますか?と、

b> PHPスクリプトによって提供される画像を実際にキャッシュする適切な方法は何でしょうか?(それらは非常に静的です)

  • スコット
4

1 に答える 1

1

うーん。確かなことはわかりませんが、imagecreatefromjpeg で時々メモリが不足しているのではないでしょうか? その場合、エラー メッセージを JPEG データとして出力し、それを表示することはありませんよね?

ちなみに、画像ファイルを文字列として取得し、imagecreatefromjpeg/imagejpeg/imagedestroy を使用せずにシャベルで取り出す方が効率的ではないでしょうか。JPEG ファイルを読み込んで、そこから内部 PHP メモリ イメージを作成し、それを JPEG に再変換して (100% の品質で)、そのデータを提供しているように見えます。データベースから行うように、印刷します。

あなたが言うとどうなりますか...

...
} else {
    header ('Content-length: ' .filesize($image_file));
    readfile ($image_file);
}
于 2010-06-28T15:45:32.750 に答える