2011-03-11 46 views
0

我犯了一個PHP文件,稱爲createCaptcha.php,代碼是這樣的:PHP故障與顯示器的GD圖像

create_image(); 
exit(); 

function create_image() { 
    //Let's generate a totally random string using md5 
    $md5_hash = md5(rand(0,999)); 
    //We don't need a 32 character long string so we trim it down to 5 
    $security_code = substr($md5_hash, 15, 5); 

    //Set the session to store the security code 
    $_SESSION["security_code"] = $security_code; 

    //Set the image width and height 
    $width = 100; 
    $height = 20; 

    //Create the image resource 
    $image = ImageCreate($width, $height); 

    //We are making three colors, white, black and gray 
    $white = ImageColorAllocate($image, 255, 255, 255); 
    $black = ImageColorAllocate($image, 0, 0, 0); 
    $grey = ImageColorAllocate($image, 204, 204, 204); 

    //Make the background black 
    ImageFill($image, 0, 0, $black); 

    //Add randomly generated string in white to the image 
    ImageString($image, 3, 30, 3, $security_code, $white); 

    //Throw in some lines to make it a little bit harder for any bots to break 
    ImageRectangle($image,0,0,$width-1,$height-1,$grey); 
    imageline($image, 0, $height/2, $width, $height/2, $grey); 
    imageline($image, $width/2, 0, $width/2, $height, $grey); 

    //Tell the browser what kind of file is come in 
    header("Content-Type: image/jpeg"); 

    //Output the newly created image in jpeg format 
    ImageJpeg($image); 

    //Free up resources 
    ImageDestroy($image); 
} 

現在,當我嘗試做一個include('createCaptcha.php');我得到這樣的警告:

Warning: Cannot modify header information - headers already sent by (output started at C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\gtw\index.php:14) in C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\gtw\registration\createCaptcha.php on line 43 

而輸出是一系列不可理解的比特(我認爲那些rapresent圖像)。事實上,我之前設置了標題。我該如何解決這個問題?

+0

index.php第14行是什麼? – 2011-03-11 15:34:31

+0

我的網站的頭..''... – markzzz 2011-03-11 15:37:19

+0

那麼你打電話這太遲了。 – 2011-03-11 15:49:23

回答

3

不包括「createCaptcha.php」稱之爲

<img src="path/to/your/script/createCaptcha.php"/> 

您的index.php文件,其中包括「createCaptcha.php」首先發送標題和它衝突標頭JPG - Sjoerd解釋更煥以及

exit()不需要

+0

正是。該文檔的標題將其標識爲HTML,然後包含具有圖像標題的腳本將使您處於無用狀態。將腳本作爲圖像進行處理,可以使圖像標頭完成其工作,並讓腳本正確返回圖像,從而有效地模仿文檔中的圖像。 – 2011-03-11 15:42:17

+0

確保有正確的路徑/ to/your/script /,確保只有在開始的時候打開php標籤才能關閉,確保腳本生成圖像 - 無錯誤,警告或通知 – bensiu 2011-03-11 15:44:09

+0

完美!這個石頭。是否有可能從src圖像直接調用該函數,而不是php文件? – markzzz 2011-03-11 15:46:08

2

在調用create_image()之前不要輸出任何東西。顯然,index.php正在輸出第14行的內容。

如果已經有內容發送到客戶端,則不能再修改標頭,因此服務器無法告訴瀏覽器內容實際上是JPEG文件的HTML文件。

+0

呃...我不能:)其實很奇怪,因爲這個麻煩總是在localhost中。在真實的服務器上,圖像顯示... – markzzz 2011-03-11 15:39:48

0

頭已經發出,你已經輸出更早的東西在頁面上的手段。

如果在header()發送之前回顯出某些內容,瀏覽器將自動發送一個標題。