0

したがって、私のHTMLマークアップには、次のような画像タグがあります。

<img src="image_generation.php" alt="template" id="image" />

また、「src」属性は、ほとんどランダムに生成される、そこで定義されたいくつかの変数を使用して画像を生成するPHPスクリプトにリンクしています。

ここで、私が実行できるようにしたいのは、画像生成スクリプトを含むページ内のこれらの確率変数にアクセスすることです。技術的にはインクルードファイルですぐに利用できるはずなので、Cookieを送信して画像タグの後でアクセスできると思います。あまり多くの情報を送信したくはありません。変数を2つ(10〜20)だけ送信します。その場合、いくつかのCookieを送信する必要があるため、セッションがより適切な選択であるかどうかはわかりません。インクルードスクリプトが古いセッションを取得し、以前に生成された画像の値を取得するためにページを更新する必要があるため、セッションも問題を引き起こします。DBを設定し、インクルードスクリプトでDBにアクセスすることもできると思いますが、変数は一時的なものであり、削除する必要があり、それは私には大変なことのように思えます。

画像生成スクリプトは次のように終了します。

header('Content-type: image/png');
imagepng($image);
imagedestroy($image);

また、ヘッダー呼び出しの前にブラウザに何も送信できません。送信しないと、画像が表示されません。Cookieまたはセッションを使用する場合image_generation.php、画像を送信し、Cookie/セッションを設定する必要があります。

この特定の状況ではそれぞれに問題があるため、どのオプション(Cookie、セッション、またはDB)も実際には私を納得させません。これを解決する方法を考えられますか?ありがとう。

主な編集#1: スクリプトを含めると、更新せずに以前に生成された画像のセッションを取得します/ Cookieを設定するか、出力バッファリングなしで画像を送信する前/後に含まれるスクリプトにセッションを設定しても問題はありません。

4

2 に答える 2

1

を使用できますが$_SESSION、タグを含む同じスクリプト<img>(イメージスクリプトの前に実行されたはずです)でセッションを使用できるようにするには、JavaScriptを介してAJAX呼び出しを行う必要があります。で実行されるAJAXハンドラーは、実行時にイメージが完全にロードされている必要があるため、イメージスクリプトによって作成されたものにwindow.onloadアクセスできる必要があります。$_SESSION

PHPハンドラーgetsession.phpの例:

header('Content-type: application/json');
// Simply part of the session into JSON
// Obviously you would want to limit this to only the variables 
// that should be sent back, so you don't expose the session on the client side!
echo json_encode(array($_SESSION['var1'],$_SESSION['var2']));
exit();

AJAX呼び出しの例(使い始めるのが簡単なのでjQueryを使用)

// Variable to hold the object returned by PHP
var imgPHPSession;
$(window).load(function() {
  $.ajax({
    url: 'getsession.php',
    dataType: 'json',
    success: function(data) {
      imgPHPSession = data;
    }
  });
});

アップデート:

これは完全にPHPで実行できますが、画像の生成に必要な変数が$_SESSIONメインスクリプトによって作成されるように、デザインを少し変更する必要があります。これらは、$_SESSION必要に応じて使用できるようにimage_generation.phpで使用できますが、メインスクリプトにはすでに認識されています。

アップデート2:

イメージ変数には作成方法に関する情報が含まれているため、イメージが大きすぎない場合は、実際にメインスクリプトで作成して、ディスクに保存できます。image_generation.phpスクリプトは引き続きとして使用できます<img src>が、その目的は、ディスクから正しいイメージを取得してブラウザーに戻し、不要になったときにディスクから削除することです。その後$_SESSION、メインスクリプトとイメージスクリプトの両方で使用できます。

于 2012-07-29T12:50:37.083 に答える
1

次のように、パラメータをsrc属性に渡すことができます。

<img src="image_generation.php/user/1/name/tom/param1/variable2"

また

<img src="image_generation.php?user=1&name=tom

このソリューションでは、セッションやCookieを忘れることができます-ステートレスです

Phpは、ob_ *関数によるバッファを使用してスマートなトリックを実行できるため、スクリプトの開始時にob_start()を呼び出して、すべてのphp出力をバッファリングできます。これにより、すべての「ヘッダーがすでに送信」エラーを回避できます。

image_generation.phpはCookieを送信する必要はありません。このスクリプトは、セッションID(ブラウザーはサーバーへのすべての要求にCookie情報を添付します)を含むCookieを受け取ります。これにより、php側でユーザーセッションを識別できます。その後、すべてのセッションパラメーターにアクセスできます。

于 2012-07-29T13:02:14.110 に答える