環境php5.3 nginx1.8
在產生驗證碼圖片的時候
` private function outputImg(){ if (imagetypes() & IMG_JPG) { header('Content-type: image/jpeg'); imagejpeg($this->im); } elseif (imagetypes() & IMG_GIF) { header('Content-type: image/gif'); imagegif($this->im); } elseif (imagetype() & IMG_PNG) { header('Content-type:image/png'); imagepng($this->im); } else { exit("Don't support image type!"); }}`
程式莫名其妙的執行了兩次,注釋掉header('Content-type: image/jpeg')後正常,頁面顯示亂碼。
回複內容:
環境php5.3 nginx1.8
在產生驗證碼圖片的時候
` private function outputImg(){ if (imagetypes() & IMG_JPG) { header('Content-type: image/jpeg'); imagejpeg($this->im); } elseif (imagetypes() & IMG_GIF) { header('Content-type: image/gif'); imagegif($this->im); } elseif (imagetype() & IMG_PNG) { header('Content-type:image/png'); imagepng($this->im); } else { exit("Don't support image type!"); }}`
程式莫名其妙的執行了兩次,注釋掉header('Content-type: image/jpeg')後正常,頁面顯示亂碼。
你把imagetypes()這個放到if裡面肯定會重複執行的啊
問題原因:在輸出映像的時候,因為有header('Content-type: image/jpeg')這個函數,頁面會重寫頭資訊,在瀏覽器端瀏覽的時候,會先執行一個html的頭,然後在執行image的頭,所以頁面就執行了兩次
解決辦法:要產生驗證碼,然而頁面缺執行了兩次,而session寫入了兩次,但圖片缺執行一次,是第一次的,那麼就給圖片字串加一個有效期間,產生的時候檢測上一次產生時間,如果間隔一秒,讀取上一次的字串產生驗證碼即可