2013-03-02 98 views
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()" />'; 

該p我得到的是,如果我使用這種方式,由於函數中的標題,我在主屏幕中顯示了圖像。有什麼辦法可以做我想做的事嗎?

回答

0

通常,您不能在HTML頁面中間輸出原始圖像數據,這是您的echo語句試圖執行的操作。

有限的機制,如data: URI scheme,但它們有重要的限制要意識到,並且可能不適合於大多數情況。

相反,您需要有一些方法可以爲您的圖像生成一個URL,其中包含足夠的信息來創建正確的圖像。對於一個簡單的例子,這可能只是像"/img.php?width=100&height=100&colour=red"

因爲你描述你的使用情況爲「類似於CAPTCHA」,這想必會更復雜,可能還需要被擾亂,而不是僅僅在URL中列明的內容。因此你需要在服務器端存儲一些東西;我可以想到幾種方法:

  1. 您可以向PHP會話寫入圖像數據或生成它所需的輸入。會話的常見問題(如鎖定)適用。
  2. 您可以將數據保存到數據庫,爲其提供唯一的密鑰;那麼圖片網址可能就像"/img.php?unique_id=42"
  3. 您可以將生成的圖像保存到磁盤,給它一個唯一的文件名。這顯然需要某種「垃圾收集」機制,否則你的磁盤將最終滿足所有這些圖像文件。