0

私が本当にやりたいことを開発する方法を知っているなら、私に知らせてください。

私はこのような画像(キャプチャに似ています)を作成するコードを持っています:

/* createImg.php */


class createImg{
public function __construct(){
    /*stuff here*/
}

public function showImg(){
    /*stuff here*/
    header("Content-type: image/png");
    imagepng($image);
    imagedestroy($image);
}
}
$img = new createImg();
$img->showImg();

そして、私が画像を作成するために行うことは、次のようなものです。

/* index.php */
echo '<img src="createImg.php" />';

すべて正常に動作しますが、私がやりたいことは次のことですが、それを実装する方法がわかりません。

/* index.php */
$img = new createImg();
//and now something like this
echo '<img src="$img->showImg()" />';

私が得る問題は、このように使用すると、関数のヘッダーが原因でメイン画面に画像が表示されることです。私がやりたいことをする方法はありますか?

4

1 に答える 1

0

一般に、HTMLページの途中で生の画像データを出力することはできません。これは、echoステートメントが実行しようとしていることです。

data:URIスキームなどのメカニズムは限られていますが、注意すべき重要な制限があり、ほとんどの状況にはおそらく適切ではありません。

代わりに、適切な画像を作成するのに十分な情報を含む、画像のURLを生成する何らかの方法が必要になります。単純なケースの場合、これは次のようになり"/img.php?width=100&height=100&colour=red"ます。

ユースケースを「CAPTCHAに似ている」と説明しているため、これはおそらくより複雑になり、URLの内容を単に綴るだけでなく、難読化する必要がある場合もあります。したがって、サーバー側に何かを保存する必要があります。私はいくつかのアプローチを考えることができます:

  1. PHPセッションに画像データ、またはそれを生成するために必要な入力を書き込むことができます。ロックなどのセッションに関する通常の問題が適用されます。
  2. データをデータベースに保存して、一意のキーを与えることができます。その場合、画像のURLはのようになります"/img.php?unique_id=42"
  3. 結果のイメージをディスクに保存して、一意のファイル名を付けることができます。これには明らかに何らかの「ガベージコレクション」メカニズムが必要です。そうしないと、ディスクが最終的にこれらすべてのイメージファイルでいっぱいになります。
于 2013-03-02T20:45:22.397 に答える