0

動的に作成された画像を使用して情報を表示するWebアプリケーションに取り組んでいます。このデータは現在、GETクエリ文字列を使用して画像に送信されていますが、より複雑な画像とデータでは、URL文字数の制限に関する問題が発生するのではないかと心配しています。

レコードIDをイメージに渡して、このクエリをデータベースに含めることもできますが、これによりサーバーへの需要が明らかに増加します。POSTを使用して取得した画像をHTMLドキュメントに追加する方法はありますか?

4

6 に答える 6

5

結局、データベースの検索はおそらくもっと速くなると思います。データベースから小さな文字列(たとえば最大2000文字)を取得することは、特にページに1つ以上ある場合は、ユーザーに常に投稿させるよりも非常に高速で、おそらく高速です。

最良のオプションは、イメージを一度作成し、変更されない場合はキャッシュすることです。画像が再度リクエストされたら、画像がキャッシュされているかどうかを確認し、readfile()を使用して画像をブラウザに送信します。キャッシュされた画像をドキュメントルートの外に保存して、他の人がアクセスできないようにするのが好きですが、これはあなたがしていること(キャッシュとプライバシーの両方)の要因ではないかもしれません。

SESSIONはオプションかもしれませんが、わずかな変更を加えて複数のページでイメージを再生成する必要がある場合は、これが最適なオプションです。そのため、毎回データベースにクエリを実行する必要はありません。

于 2008-10-05T16:27:06.027 に答える
1

簡単ではありません-HTMLには、SRC属性を定義する<img /> <script />やその他のタグのように、複数のPOSTリクエストを送信して結果をインラインリソースとしてレンダリングするための本質的なサポートは含まれていません。

AJAXの回避策でさえ、ここでは役に立たない場合があります。画像のSRC属性を変更するのは簡単ですが、ブラウザに新しい画像を取得させるだけです(構成に応じて、キャッシュまたはサーバーから)。実際には、画像のコンテンツをHTTP POSTからのバイナリ応答に変更することははるかに複雑です-base64を調べることはできますが、応答ストリームをエンコードし、data:URLスキームを使用して結果の画像をページに表示します。

もちろん、送信ボタンとして「クリックして画像を表示」を使用したフォームをいつでも使用できます。フォームを送信すると、サーバーがimage / jpegデータで応答し、ブラウザにスタンドアロン画像として表示されます。ただし、インラインで実行することはできないと確信しています。

于 2008-10-05T16:38:34.973 に答える
0

1つのオプションは、このデータをセッション変数に格納することです。サーバーがそれをより適切に処理する方法を確認するために、いくつかのテストを実行する必要があります

于 2008-10-05T16:38:48.747 に答える
0

Darryl Heinのコメントを拡張するには:

これで、使い終わったらSESSIONから削除することをお勧めします。それが常にそこにある場合、PHPは画像「ページ」だけでなく、すべてのページ呼び出しでそれをロードします。–ダリル・ハイン

ええ、私はこれについて考えて同意します。不要なセッションデータでチューブを詰まらせたくないのですが、データをいつ削除するかわからない場合はどうなりますか?画像の作成後にセッションデータを削除することはできません。画像を2回表示する場合はどうなりますか?画像自体が一定期間キャッシュされない限り。

このようなもの

リクエストページ

<? //index.php
    $_SESSION['imagedata']['header'] = array('name'=>'Simon','backgroundcolor'=>'red');
    echo '<img src="image.php?image=header">';
    // more stuff
    echo '<img src="image.php?image=header">'; // same image
?>    

画像スクリプト

<?  //image.php
    switch($_GET['image']){
        case 'header':
            if(isSet($_SESSION['imagedata']['header'])){
                // create image using $_SESSION['imagedata']['header'] data
                // create cached image
                unset($_SESSION['imagedata']['header']);
            else if(cache_file_exists()){
                // display cached file
            }else{
                // no data, use plan B
            }
        break;
    }
?>
于 2008-10-05T17:03:54.687 に答える
0

画像をIDで識別できる場合は、それを使用してください。同じIDが毎回同じ画像を生成すると仮定すると、プロキシを使用して、標準のHTTPキャッシングサポートを使用して画像を提供します。

于 2008-10-05T18:09:02.810 に答える
0

いくつかのシナリオといくつかの制限の下では、画像を表示してその iframe を指すターゲット属性で投稿する iframe を使用できます。

そのため、メイン ページには iframe があります。メイン ページには I フレームを投稿するフォームがあり、サーバーは iframe に表示される画像を返します。

于 2008-10-06T08:35:38.130 に答える