PHP驗證碼圖片不能輸出
檔案名稱 global_func.php
function _code(){
//運行驗證碼
//隨記碼個數
$_rnd_code=4;
for($i=0;$i<$_rnd_code;$i++){
$_nmsg.=dechex(mt_rand(0, 15));
}
//儲存在session中
$_SESSION['code']=$_nmsg;
//長和高
$_width=75;
$_height=25;
//建立一張圖片
$_img=imagecreatetruecolor($_width,$_height);
//白色
$_white=imagecolorallocate($_img, 255, 255, 255);
//填充
imagefill($_img, 0, 0, $_white);
$_flag=false;
if($_flag){
//黑色,邊框
$_black=imagecolorallocate($_img, 0,0,0);
imagerectangle($_img, 0,0, $_width-1,$_height-1,$_black);
}
//畫出6個線條
for($i=0;$i<6;$i++){
$_rnd_color=imagecolorallocate($_img, mt_rand(0,255), mt_rand(0,255), mt_rand(0,255));
imageline($_img,mt_rand(0,$_width),mt_rand(0,$_height),mt_rand(0,$_width),mt_rand(0,$_height), $_rnd_color);
}
//隨即雪花
for($i;$i<100;$i++){
$_rnd_color=imagecolorallocate($_img,mt_rand(200,255), mt_rand(200,255), mt_rand(200,255));
imagestring($_img,1, mt_rand(1, $_width),mt_rand(1,$_height), '*', $_rnd_color);
}
//輸出驗證碼
for($i=0;$i
$_rnd_color=imagecolorallocate($_img, mt_rand(0, 100), mt_rand(0, 150), mt_rand(0, 200));
imagestring($_img,5,$i*$_width/$_rnd_code+mt_rand(1,10), mt_rand(1,$_height/2),$_SESSION['code'][$i],$_rnd_color);
}
//輸出映像
header('Content-Type:image/png');
imagepng($_img);
//銷毀
imagedestroy($_img);
}
這個我要是調用 global_func.php 這個檔案下的 function _code(); 就出錯是一個紅叉。
code.php
_code();
這個是我直接寫在code.php中就能夠使用。
code.php
//隨記碼個數
$_rnd_code=4;
for($i=0;$i<$_rnd_code;$i++){
$_nmsg.=dechex(mt_rand(0, 15));
}
//儲存在session中
$_SESSION['code']=$_nmsg;
//長和高
$_width=75;
$_height=25;
//建立一張圖片
$_img=imagecreatetruecolor($_width,$_height);
//白色
$_white=imagecolorallocate($_img, 255, 255, 255);
//填充
imagefill($_img, 0, 0, $_white);
$_flag=false;
if($_flag){
//黑色,邊框
$_black=imagecolorallocate($_img, 0,0,0);
imagerectangle($_img, 0,0, $_width-1,$_height-1,$_black);
}
//畫出6個線條
for($i=0;$i<6;$i++){
$_rnd_color=imagecolorallocate($_img, mt_rand(0,255), mt_rand(0,255), mt_rand(0,255));
imageline($_img,mt_rand(0,$_width),mt_rand(0,$_height),mt_rand(0,$_width),mt_rand(0,$_height), $_rnd_color);
}
//隨即雪花
for($i;$i<100;$i++){
$_rnd_color=imagecolorallocate($_img,mt_rand(200,255), mt_rand(200,255), mt_rand(200,255));
imagestring($_img,1, mt_rand(1, $_width),mt_rand(1,$_height), '*', $_rnd_color);
}
//輸出驗證碼
for($i=0;$i
$_rnd_color=imagecolorallocate($_img, mt_rand(0, 100), mt_rand(0, 150), mt_rand(0, 200));
imagestring($_img,5,$i*$_width/$_rnd_code+mt_rand(1,10), mt_rand(1,$_height/2),$_SESSION['code'][$i],$_rnd_color);
}
//輸出映像
header('Content-Type:image/png');
imagepng($_img);
//銷毀
imagedestroy($_img);
這段驗證碼我直接運行不封裝成函數的形式可以使用驗證碼一切正常。
但是我用function _code() 之後 在調用 _code() 在html中顯示的是一個紅叉。不知道是為什麼
------解決方案--------------------
會不會是 header('Content-Type:image/png'); 的原因,
BOM頭會影響到瀏覽器預期的檔案類型
------解決方案--------------------
即使是寫成函數,調用也是沒有問題的。
function _code(){
//運行驗證碼
}
?>
另一個頁面
include("./test/test.php");
_code();
------解決方案--------------------
你開啟php的出錯提示你就會知道為什麼了..