在学习PHP用图片生产验证码过程中,图片无法正常生成,从网上查了一些资料找到两种解决方法
最初的代码:
<?php
session_start();
//循环出四位 创建随机码
for ($i=0;$i<4;$i++)
{
$_nmsg .= dechex(mt_rand(0,15));
}
//将随机码保存在session
$_SESSION['code'] = $_nmsg;
echo $_SESSION['code'];
//开始创建图片
//长和高
$_width = 75;
$_height = 25;
//创建一张图像
$_img = imagecreatetruecolor($_width,$_height);
//输出图像
header("Content-Type: image/png");
imagepng($_img);
imagedestroy($_img);
?>
在浏览器无法正常输出,结果如下图所示:
根据从网上搜索的资料,总结了两种方法:
第一种:用 ob_clean();方法清理缓冲区的内容。
如果在网站中经常使用生成图片这类的文件,要想不出现上述错误,就要用ob_clean();方法清理缓冲区。
<?php
session_start();
//循环出四位 创建随机码
for ($i=0;$i<4;$i++)
{
$_nmsg .= dechex(mt_rand(0,15));
}
$_SESSION['code'] = $_nmsg;
echo $_SESSION['code'];
/*用ob_clean();函数清理输出缓冲区中的内容*/
ob_clean();
//长和高
$_width = 75;
$_height = 25;
//创建一张图像
$_img = imagecreatetruecolor($_width,$_height);
//输出图像
header("Content-Type: image/png");
imagepng($_img);
imagedestroy($_img);
?>
加上ob_clean();函数后浏览器输出正常,结果如下,有个 75*25的黑色区域,图片正常输出:
第二种方法:
因为图片是二进制的文件,如果前边有输出(echo print_r等)的话,可能会相当于在图片前面多出某些字节内容,使浏览器输出错误。
解决方法,输出(echo print_r)注释掉 即可。我在这把代码移到后边注释掉。
<?php
session_start();
//长和高
$_width = 75;
$_height = 25;
//创建一张图像
$_img = imagecreatetruecolor($_width,$_height);
//输出图像
header("Content-Type: image/png");
imagepng($_img);
imagedestroy($_img);
//循环出四位 创建随机码
//for ($i=0;$i<4;$i++)
//{
// $_nmsg .= dechex(mt_rand(0,15));
//}
//将随机码保存在session 一个站点session可跨页面持久保存
//$_SESSION['code'] = $_nmsg;
//echo $_SESSION['code'];
?>
结果 正常输出:
转载于:https://www.cnblogs.com/yangjunnan/p/8005990.html