为了账号安全,请及时绑定邮箱和手机立即绑定

正在回答

4 回答

include.php中和image.func.pgp中的session开启一个就可以了,都开启就出不来验证码

2 回复 有任何疑惑可以回复我~
#1

qq_叛屰HR_0

太棒啦!
2017-04-30 回复 有任何疑惑可以回复我~

终于知道贴代码方法了。以下代码运行在 php 7.0.8 上通过。

include.php

<?php
header("content-type:text/html;charset=utf-8");
date_default_timezone_set("PRC");
//session_start();
define("ROOT", dirname(__FILE__));
	
set_include_path(PATH_SEPARATOR.ROOT."/lib".PATH_SEPARATOR.ROOT."/core".PATH_SEPARATOR.ROOT."/configs".PATH_SEPARATOR.get_include_path());
//require_once 'mysql.func.php';
require_once 'string.func.php';
require_once 'image.func.php';
/*require_once 'common.func.php';
require_once 'page.func.php';
require_once 'configs.php';
require_once 'admin.inc.php';
require_once 'cate.inc.php';
require_once 'pro.inc.php';*/
// require_once 'album.inc.php';
// require_once 'upload.func.php';
// require_once 'user.inc.php';
// connect();
 // 连接数据库
 //$link = connet();

string.func.php:

<?php 

	// 产生随机数
	function buidRandomString($type=1, $length = 4){

		// 根据参数类型,产生数字、数字小写字母、数字小写字母大写字母等字符
		if ($type == 1) {
			$chars = join("", range(0, 9));
		}elseif ($type == 2) {
			$chars = join("", array_merge(range("a","z"), range("A", "Z")));
		}elseif ($type == 3) {
			$chars = join("", array_merge(range("a","z"), range("A", "Z"), range(0, 9)));
		}

		if ($length > strlen($chars)) {
			exit("字符串长度不够");
		}
		// 随机地打乱字符串中的所有字符
		$chars = str_shuffle($chars);
		// 截取制定长度字符
		return substr($chars, 0, $length);

	}

image.func.php :

<?php
 	require_once '../include.php';
		/**
		 *  通过GD库创建验证码
		 *  $width: 验证码图片宽度
		 *  $height: 验证码图片高度
		 *  $type:	产生字符类型,1为数字,2为数字和小写字母,3为数字小写字母加大写字母
		 *  $length: 验证码字符个数
		 *  $pixel: 干扰点数量
		 *  $line: 干扰线数量
		 *  $sess_name: session key
		 */
	function verifyImage($type = 1, $length = 4, $pixel = 0, $line = 0, $width = 80, $height = 20, $sess_name = "verify"){
		//使能session
		session_start();
		// 创建画布
		// 创建真色彩画布
		$image = imagecreatetruecolor($width, $height);
		// 画笔颜色
		$white = imagecolorallocate($image, 255, 255, 255);
		$black = imagecolorallocate($image, 0, 0, 0);

		//用填充矩形填充画布
		imagefilledrectangle($image, 1, 1, $width-2, $height-2, $white);
		// 产生随机字符串
		$chars = buidRandomString($type, $length);
		// echo $chars."<br>";
		//存储到session
		$_SESSION[$sess_name] = $chars;
		// 字体数组
		$fontfiles = array("hye3gjm.TTF","hyh4gjm.TTF","hyk1gjm.TTF","STKAITI.TTF","STLITI.TTF","STXIHEI.TTF","STXINGKA.TTF","STZHONGS.TTF");
		// 随机获取数组中任意一个值
		$fontfile = "../fonts/".$fontfiles[mt_rand(0, count($fontfiles)-1)];


		/* 将TTF (TrueType Fonts) 字型文字写入图片*/

		for ($i=0; $i < $length; $i++) {
			//产生14 ~ 18的随机数用于字体大小
			$size = mt_rand(14, 18);
			//产生随机数用于字符角度
			$angle = mt_rand(-15, 15);
			//产生字符位置坐标
			$x = 5 + $i * $size;
			$y = mt_rand(15, 20);

			// 产生随机画笔颜色,用于设置字体颜色
			$color = imagecolorallocate($image, mt_rand(50, 90), mt_rand(80, 200), mt_rand(90, 180));
			$text = substr($chars, $i, 1);

			imagettftext($image, $size, $angle, $x, $y, $color, $fontfile, $text);
			
		}
		// 绘制点、线等干扰元素

		if ($pixel) {
			for ($i=0; $i < $pixel; $i++) {
				imagesetpixel($image, mt_rand(0, $width-1), mt_rand(0, $height-1), $black);
			}
		}

		if ($line) {
			for ($i=0; $i < $line; $i++) {
			$color = imagecolorallocate($image, mt_rand(50, 90), mt_rand(80, 200), mt_rand(90, 180));
				imageline($image, mt_rand(0, $width-1), mt_rand(0, $height-1), mt_rand(0, $width-1), mt_rand(0, $height-1), $color);
			}
		}

		// 输出图片格式
		header("content-type:image/gif");
		// 生成图片
		imagegif($image);
		// 释放资源
		imagedestroy($image);

	}

        verifyImage(2, 4, 10, 3);


1 回复 有任何疑惑可以回复我~
#1

忧郁的蛋挞

忘了说了,字体文件根据自己的字体文件修改下。
2016-11-15 回复 有任何疑惑可以回复我~
#2

熊猫的家园 提问者

谢谢,我试试看
2016-11-15 回复 有任何疑惑可以回复我~
#3

熊猫的家园 提问者 回复 忧郁的蛋挞

请问代码怎么贴出来啊?
2016-11-16 回复 有任何疑惑可以回复我~
#4

忧郁的蛋挞 回复 熊猫的家园 提问者

点“代码语言”选择相应语言,在文本框会出现一个灰色矩形区域,直接ctrl+v粘贴代码就ok.
2016-11-16 回复 有任何疑惑可以回复我~
#5

98開水1 回复 忧郁的蛋挞

我复制你的代码 但是验证码也还是空白,我的版本是5.4.12
2016-12-08 回复 有任何疑惑可以回复我~
#6

98開水1 回复 忧郁的蛋挞

大神 能指点下吗?
2016-12-08 回复 有任何疑惑可以回复我~
#7

忧郁的蛋挞 回复 98開水1

复制了有没有改为自己相应的字体文件和路径呢?如果一点都没改那肯定是不行的,得根据自己的字体文件来配置。
2016-12-19 回复 有任何疑惑可以回复我~
查看4条回复

我的代码给你试试。    




0 回复 有任何疑惑可以回复我~
#1

忧郁的蛋挞

回答错了,不知道怎么贴代码。
2016-11-15 回复 有任何疑惑可以回复我~

php 和mysql 升级了版本之后 API大部分都变了,当然不能直接运行。

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
手把手教你实现电商网站后台开发
  • 参与学习       117283    人
  • 解答问题       1999    个

手把手教你用PHP搭建电子商务平台,由浅入深教你搭建电商系统

进入课程

验证码出不来

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信