当前位置: 代码迷 >> PHP >> 解决php session验证码不现实的有关问题
  详细解决方案

解决php session验证码不现实的有关问题

热度:90   发布时间:2016-04-28 17:45:10.0
解决php session验证码不现实的问题

本人一开始图片老显示不出来,显示的是一个裂了的图片,经查询发现可能由以下几种可能造成

1)在header("Content-type:image/png");前加如下一段代码

ini_set('display_errors', 'Off');
本人就是由上面的问题造成。

附上生成验证码的图片的代码

<?php 	ini_set('display_errors', 'Off');	header("Content-type:image/png");	session_start();		$_SESSION['code'] = 'null';			//初始化	$width = '58';	$height = '22';	//$code = '';	$tmptext ='';	$bordercolor= '';	for($i=0;$i<4;$i++)	{		$tmptext = rand(0,9);		$code .= $tmptext;	}	$_SESSION['code'] = $code;	//以下三句诗让浏览器不缓存	@header("Expires:-1");	@header("Cache-Control:no-store,private,posc-check=0,pre-check=0,max-age=0",FALSE);	@header("Pragma:no-cache");		if(function_exists('imagecreate') && function_exists('imagecolorset') && function_exists('imagecopyresized')			&& function_exists('imagecolorallocate') && function_exists('imagesetpixel') 			&& function_exists('imagechar')  &&  function_exists('imagecreatefromgif')			&& function_exists('imagepng')		)	{		$im = imagecreate($width, $height);		$backgroundcolor = imagecolorallocate($im, 255, 255, 255);		$numorder = array(1,2,3,4);		/**shuffle将数组打乱*/		shuffle($numorder);		/**array_flip返回一个被反转的数组,键值被处理值*/		$numorder = array_flip($numorder);		$x='';		$y='';		$text_color = '';		for($i=1;$i<=4;$i++)		{			$x = $numorder[$i] * 13 + mt_rand(0,4) -2;			$y = mt_rand(0,3);			$text_color = imagecolorallocate($im, mt_rand(50,255), mt_rand(50,255), mt_rand(50,255));			/**将字符画在$im图中,5表示字体的大小 $x+5 */			imagechar($im, 5, $x+5, $y+3, $code[$numorder[$i]], $text_color);		}				$linenums = mt_rand(10,32);		for($i=0;$i<=$linenums;$i++)		{			$linecolor = imagecolorallocate($im, 255, mt_rand(0,255), mt_rand(0,255));			$linex = mt_rand(0,255);			$liney = mt_rand(0,255);			imageline($im, $linex, $liney, $linex+mt_rand(0,4)-2, $liney+mt_rand(0,4)-2,  $linecolor);		}				for($i=0;$i<40;$i++)		{			$pointcolor = imagecolorallocate($im, mt_rand(0,255), mt_rand(0,255), mt_rand(0,255));			imagesetpixel($im, mt_rand(0,$width), mt_rand(0,$height), $pointcolor);		}				$bordercolor = imagecolorallocate($im, 150, 150, 150);		imagerectangle($im, 0, 0, $width-1, $height-1, $bordercolor);				imagepng($im);		imagedestroy($im);	}?>



2)变量没初始化


3)在header("Content-type:image/png");前加入

ob_clean();



第二三中方法不确保可以解决问题,仅供参考。

  相关解决方案