3


img タグ(つまり、 )に表示するイメージをロードするはずの .php ファイルがあります<img src="the_file.php?which=0"/>。次のようになります。

<?php
    ob_clean();

    header("Content-type: image/png");

    include_once("util.php");

    //Do a simple calculation to get $name from (int)$_GET["which"];

    $im = imagecreatefrompng("protected_directory/".$name.".png");

    imagepng($im,NULL,0,NULL);

    imagedestroy($im);

    ob_end_flush();
?>

それは正しく動作しますが、画像は直接ロードするよりもかなり遅くロードされます
(つまり<img src="protected_directory/the_name.png"/>、「the_name」は PHP ファイルと同じ方法で計算されますが、protected_directory は誰でも読み取り可能ではないため、これを行うことはできません)。 .

私の質問は、なぜこれが突然非常に遅くなったのですか? 大きな画像ではありませんが、極端に小さい画像でもありません。

4

3 に答える 3

3

既存のファイルを表示するだけの場合は、 を使用readfile()してブラウザに出力します。このために、編集可能な GD オブジェクトを作成するすべてのオーバーヘッドを経験する必要はありません。

于 2012-08-11T01:48:59.513 に答える
1

imagepng 遅いことが知られています。PHPスクリプトで画像を出力する必要がある場合は、次のようなコードを使用してください。

$filename = md5(time() . mk_rand());
imagepng($im, $filename);
echo file_get_contents($filename);
于 2012-08-11T01:42:04.323 に答える
1

別の答えとして、3番目のパラメーターを使用して画像を圧縮できることがわかりました(PNGはzlibを使用します)。9 に設定すると、他のソリューションと同様に機能します。

于 2012-08-11T01:58:15.583 に答える