GVKun编程网logo

PHP图片验证码识别(调用阿里云市场接口),函数来源:梦行云软件(php 图片验证码)

18

本文将介绍PHP图片验证码识别(调用阿里云市场接口),函数来源:梦行云软件的详细情况,特别是关于php图片验证码的相关信息。我们将通过案例分析、数据研究等多种方式,帮助您更全面地了解这个主题,同时也将

本文将介绍PHP图片验证码识别(调用阿里云市场接口),函数来源:梦行云软件的详细情况,特别是关于php 图片验证码的相关信息。我们将通过案例分析、数据研究等多种方式,帮助您更全面地了解这个主题,同时也将涉及一些关于eoLinker-API_Shop_验证码识别与生成类API调用的代码示例合集:六位图片验证码生成、四位图片验证码生成、简单验证码识别等、Java调用阿里云短信接口发送手机验证码、PHP图片验证码、php图片验证码不显示的知识。

本文目录一览:

PHP图片验证码识别(调用阿里云市场接口),函数来源:梦行云软件(php 图片验证码)

PHP图片验证码识别(调用阿里云市场接口),函数来源:梦行云软件(php 图片验证码)

//图片识别 $image is path or base64
function ocr($appcode,$image){
$host = "https://tysbgpu.market.alicloudapi.com";
$path = "/api/predict/ocr_general";
$method = "POST";
$headers = array();
array_push($headers, "Authorization:APPCODE " . $appcode);
//根据API的要求,定义相对应的Content-Type
array_push($headers, "Content-Type".":"."application/json; charset=UTF-8");
$querys = "";
$data=array();
$data['image']=$image;
$data['configure']=array();
$data['configure']['min_size']=12;
$data['configure']['output_prob']=true;
$data['configure']['output_keypoints']=false;
$data['configure']['skip_detection']=false;
$data['configure']['without_predicting_direction']=false;
$bodys =json_encode($data);
//$bodys = "{\"image\":\"图片二进制数据的base64编码/图片url\",\"configure\":{\"min_size\":16,#图片中文字的最小高度,单位像素\"output_prob\":true,#是否输出文字框的概率\"output_keypoints\":false,#是否输出文字框角点\"skip_detection\":false#是否跳过文字检测步骤直接进行文字识别\"without_predicting_direction\":false#是否关闭文字行方向预测}}";
$url = $host . $path;

$curl = curl_init();
curl_setopt($curl, CURLOPT_CUSTomrEQUEST, $method);
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_FAILONERROR, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HEADER, true);
if (1 == strpos("$".$host, "https://"))
{
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
}
curl_setopt($curl, CURLOPT_POSTFIELDS, $bodys);
$r=(curl_exec($curl));
$r=explode('{"request_id"',$r);
if(!isset($r[1])){return false;}
$r='{"request_id"'.$r[1];
$r=json_decode($r,1);
if(!$r['success'] || !isset($r['ret'])){return false;}
$line=array();
foreach($r['ret'] as $v){
$line[]=$v['word'];
}
if(!isset($line[0])){return false;}
return $line;

}

eoLinker-API_Shop_验证码识别与生成类API调用的代码示例合集:六位图片验证码生成、四位图片验证码生成、简单验证码识别等

eoLinker-API_Shop_验证码识别与生成类API调用的代码示例合集:六位图片验证码生成、四位图片验证码生成、简单验证码识别等

以下示例代码适用于 www.apishop.net 网站下的API,使用本文提及的接口调用代码示例前,您需要先申请相应的API服务。

  1. 六位图片验证码生成:包括纯数字、小写字母、大写字母、大小写混合、数字+小写、数字+大写、数字+大小写等情况。
  2. 四位图片验证码生成:包括纯数字、小写字母、大写字母、大小写混合、数字+小写、数字+大写、数字+大小写等情况。
  3. 简单验证码识别:验证码类型 : 数字+字母, 纯英文, 纯数字,计算题
  4. 英数_验证码识别:纯数字,纯英文,数字+英文
  5. 中英数_验证码识别:英文、数字、中文或混合型

API Shop(apishop.net)提供多达50款的常用第三方API,可以从github上下载代码示例合集:https://github.com/apishop/All-APIs

以上接口均包含PHP、Python、C#和Java等四种语言的代码示例,以 识别中英数验证码 API为例:

(1)基于PHP的 识别中英数验证码 API服务请求的代码示例

<?php
$method = "POST";
$url = "https://api.apishop.net/common/checkcode/recognizeVerifyCodeComplicate";
$headers = NULL;
$params = array(
    "convertJPG" => "", //是否转换成jpg格式(有少量png或gif图转成jpg格式后识别率明显提高,但并不是所有png或gif转成jpg后都会提高识别率。) 此字段为1时表示需要把图片转为jpg格式,其他值不做转换操作。
    "imgBASE64" => "", //图片文件的base64字符串。图片大小需要小于100KB。
    "codeType" => "", //验证码类型,最大长度为10.(10:任意长度数字(成功率有所降低),11~19:1~9位数字,20:任意长度英文(成功率有所降低),21~29:1~9位英文,30:任意长度英数混合(成功率有所降低),31~39:1~9位英数混合,40:任意长度汉字(成功率有所降低),41~49:1~9位汉字,50:任意长度中英数混合(成功率有所降低)),如“34”代表四位英数混合	
);

$result = apishop_curl($method, $url, $headers, $params);
If ($result) {
    $body = json_decode($result["body"], TRUE);
    $status_code = $body["statusCode"];
    If ($status_code == "000000") {
        //状态码为000000, 说明请求成功
        echo "请求成功:" . $result["body"];
    } else {
        //状态码非000000, 说明请求失败
        echo "请求失败:" . $result["body"];
    }
} else {
    //返回内容异常,发送请求失败,以下可根据业务逻辑自行修改
    echo "发送请求失败";
}

/**
 * 转发请求到目的主机
 * @param $method string 请求方法
 * @param $URL string 请求地址
 * @param null $headers 请求头
 * @param null $param 请求参数
 * @return array|bool
 */
function apishop_curl(&$method, &$URL, &$headers = NULL, &$param = NULL)
{
    // 初始化请求
    $require = curl_init($URL);
    // 判断是否HTTPS
    $isHttps = substr($URL, 0, 8) == "https://" ? TRUE : FALSE;
    // 设置请求方式
    switch ($method) {
        case "GET":
            curl_setopt($require, CURLOPT_CUSTOMREQUEST, "GET");
            break;
        case "POST":
            curl_setopt($require, CURLOPT_CUSTOMREQUEST, "POST");
            break;
        default:
            return FALSE;
    }
    if ($param) {
        curl_setopt($require, CURLOPT_POSTFIELDS, $param);
    }
    if ($isHttps) {
        // 跳过证书检查
        curl_setopt($require, CURLOPT_SSL_VERIFYPEER, FALSE);
        // 检查证书中是否设置域名
        curl_setopt($require, CURLOPT_SSL_VERIFYHOST, 2);
    }
    if ($headers) {
        // 设置请求头
        curl_setopt($require, CURLOPT_HTTPHEADER, $headers);
    }
    // 返回结果不直接输出
    curl_setopt($require, CURLOPT_RETURNTRANSFER, TRUE);
    // 重定向
    curl_setopt($require, CURLOPT_FOLLOWLOCATION, TRUE);
    // 把返回头包含再输出中
    curl_setopt($require, CURLOPT_HEADER, TRUE);
    // 发送请求
    $response = curl_exec($require);
    // 获取头部长度
    $headerSize = curl_getinfo($require, CURLINFO_HEADER_SIZE);
    // 关闭请求
    curl_close($require);
    if ($response) {
        // 返回头部字符串
        $header = substr($response, 0, $headerSize);
        // 返回体
        $body = substr($response, $headerSize);
        // 过滤隐藏非法字符
        $bodyTemp = json_encode(array(
            0 => $body
        ));
        $bodyTemp = str_replace("\ufeff", "", $bodyTemp);
        $bodyTemp = json_decode($bodyTemp, TRUE);
        $body = trim($bodyTemp[0]);
        // 将返回结果头部转成数组
        $respondHeaders = array();
        $header_rows = array_filter(explode(PHP_EOL, $header), "trim");
        foreach ($header_rows as $row) {
            $keylen = strpos($row, ":");
            if ($keylen) {
                $respondHeaders[] = array(
                    "key" => substr($row, 0, $keylen),
                    "value" => trim(substr($row, $keylen + 1))
                );
            }
        }
        return array(
            "headers" => $respondHeaders,
            "body" => $body
        );
    } else {
        return FALSE;
    }
}

(2)基于Python的 识别中英数验证码 API服务请求的代码示例

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 测试环境: python2.7
# 安装requests依赖 => pip install requests/ easy_install requests

# 导入requests依赖
import requests
import json
import sys

reload(sys)
sys.setdefaultencoding(''utf-8'')

def apishop_send_request(method, url, params=None, headers=None):
    ''''''
    转发请求到目的主机
    @param method str 请求方法
    @param url str 请求地址
    @param params dict 请求参数
    @param headers dict 请求头
    ''''''
    method = str.upper(method)
    if method == ''POST'':
        return requests.post(url=url, data=params, headers=headers)
    elif method == ''GET'':
        return requests.get(url=url, params=params, headers=headers)
    else:
        return None

method = "POST"
url = "https://api.apishop.net/common/checkcode/recognizeVerifyCodeComplicate"
headers = None
params = {			
    "convertJPG":"", #是否转换成jpg格式(有少量png或gif图转成jpg格式后识别率明显提高,但并不是所有png或gif转成jpg后都会提高识别率。) 此字段为1时表示需要把图片转为jpg格式,其他值不做转换操作。
    "imgBASE64":"", #图片文件的base64字符串。图片大小需要小于100KB。
    "codeType":"", #验证码类型,最大长度为10.(10:任意长度数字(成功率有所降低),11~19:1~9位数字,20:任意长度英文(成功率有所降低),21~29:1~9位英文,30:任意长度英数混合(成功率有所降低),31~39:1~9位英数混合,40:任意长度汉字(成功率有所降低),41~49:1~9位汉字,50:任意长度中英数混合(成功率有所降低)),如“34”代表四位英数混合
}
result = apishop_send_request(method=method, url=url, params=params, headers=headers)
if result:
    body = result.text
    response = json.loads(body)
    status_code = response["statusCode"]
    if (status_code == ''000000''):
        # 状态码为000000, 说明请求成功
        print(''请求成功:%s'' % (body,))
    else:
        # 状态码非000000, 说明请求失败
        print(''请求失败: %s'' % (body,))
else:
    # 返回内容异常,发送请求失败
    print(''发送请求失败'')

(3)基于C#的 识别中英数验证码 API服务请求的代码示例

using System;
using System.Collections.Generic;
using System.IO;
using System.Net;
using System.Text;
using System.Web.Script.Serialization;

namespace apishop_sdk
{
class Program
{
    /**
     * 转发请求到目的主机
     * @param method string 请求方法
     * @param url string 请求地址
     * @param params Dictionary<string,string> 请求参数
     * @param headers Dictionary<string,string> 请求头
     * @return string
    **/
    static string apishop_send_request(string method, string url, Dictionary<string, string> param, Dictionary<string, string> headers)
    {
        string result = string.Empty;
        try
			{
				string paramData = "";
				if (param != null && param.Count > 0)
				{
					StringBuilder sbuilder = new StringBuilder();
					foreach (var item in param)
					{
						if (sbuilder.Length > 0)
						{
							sbuilder.Append("&");
						}
						sbuilder.Append(item.Key + "=" + item.Value);
					}
					paramData = sbuilder.ToString();
				}
				method = method.ToUpper();
				if (method == "GET")
				{
					url = string.Format("{0}?{1}", url, paramData);
				}
				HttpWebRequest wbRequest = (HttpWebRequest)WebRequest.Create(url);
				if (method == "GET")
				{
					wbRequest.Method = "GET";
				}
				else if (method == "POST")
				{
					wbRequest.Method = "POST";
					wbRequest.ContentType = "application/x-www-form-urlencoded";
					wbRequest.ContentLength = Encoding.UTF8.GetByteCount(paramData);
					using (Stream requestStream = wbRequest.GetRequestStream())
					{
						using (StreamWriter swrite = new StreamWriter(requestStream))
						{
							swrite.Write(paramData);
						}
					}
				}

				HttpWebResponse wbResponse = (HttpWebResponse)wbRequest.GetResponse();
				using (Stream responseStream = wbResponse.GetResponseStream())
				{
					using (StreamReader sread = new StreamReader(responseStream))
					{
						result = sread.ReadToEnd();
					}
				}
			}
			catch
			{
				return "";
			}
			return result;
		}
		class Response
		{
			public string statusCode;
		}
		static void Main(string[] args)
		{
			string method = "POST";
			string url = "https://api.apishop.net/common/checkcode/recognizeVerifyCodeComplicate";
			Dictionary<string, string> param = new Dictionary<string, string>();			
            param.Add("convertJPG", ""); //是否转换成jpg格式(有少量png或gif图转成jpg格式后识别率明显提高,但并不是所有png或gif转成jpg后都会提高识别率。) 此字段为1时表示需要把图片转为jpg格式,其他值不做转换操作。
    param.Add("imgBASE64", ""); //图片文件的base64字符串。图片大小需要小于100KB。
    param.Add("codeType", ""); //验证码类型,最大长度为10.(10:任意长度数字(成功率有所降低),11~19:1~9位数字,20:任意长度英文(成功率有所降低),21~29:1~9位英文,30:任意长度英数混合(成功率有所降低),31~39:1~9位英数混合,40:任意长度汉字(成功率有所降低),41~49:1~9位汉字,50:任意长度中英数混合(成功率有所降低)),如“34”代表四位英数混合
		
			Dictionary<string, string> headers = null;
			string result = apishop_send_request(method, url, param, headers);
			if (result == "")
			{
				//返回内容异常,发送请求失败
				Console.WriteLine("发送请求失败");
				return;
			}

			Response res = new JavaScriptSerializer().Deserialize<Response>(result);
			if (res.statusCode == "000000")
			{
				//状态码为000000, 说明请求成功
				Console.WriteLine(string.Format("请求成功: {0}", result));
			}
			else
			{
				//状态码非000000, 说明请求失败
				Console.WriteLine(string.Format("请求失败: {0}", result));
			}
			Console.ReadLine();
		}
	}
}

(4)基于Java的 识别中英数验证码 API服务请求的代码示例

package net.apishop.www.controller;

import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Map;
import com.alibaba.fastjson.JSONObject;

/**
* httpUrlConnection访问远程接口工具
*/
public class Api
{
    /**
    * 方法体说明:向远程接口发起请求,返回字节流类型结果
    * param url 接口地址
    * param requestMethod 请求方式
    * param params 传递参数     重点:参数值需要用Base64进行转码
    * return InputStream 返回结果
    */
    public static InputStream httpRequestToStream(String url, String requestMethod, Map<String, String> params){
        InputStream is = null;
		try{
			String parameters = "";
			boolean hasParams = false;
			// 将参数集合拼接成特定格式,如name=zhangsan&age=24
			for (String key : params.keySet()){
				String value = URLEncoder.encode(params.get(key), "UTF-8");
				parameters += key + "=" + value + "&";
				hasParams = true;
			}
			if (hasParams){
				parameters = parameters.substring(0, parameters.length() - 1);
			}
			// 请求方式是否为get
			boolean isGet = "get".equalsIgnoreCase(requestMethod);
			// 请求方式是否为post
			boolean isPost = "post".equalsIgnoreCase(requestMethod);
			if (isGet){
				url += "?" + parameters;
			}
			URL u = new URL(url);
			HttpURLConnection conn = (HttpURLConnection) u.openConnection();
			// 请求的参数类型(使用restlet框架时,为了兼容框架,必须设置Content-Type为“”空)
            conn.setRequestProperty("Content-Type", "application/octet-stream");
			//conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
			// 设置连接超时时间
			conn.setConnectTimeout(50000);
			// 设置读取返回内容超时时间
			conn.setReadTimeout(50000);
			// 设置向HttpURLConnection对象中输出,因为post方式将请求参数放在http正文内,因此需要设置为ture,默认false
			if (isPost){
				conn.setDoOutput(true);
			}
			// 设置从HttpURLConnection对象读入,默认为true
			conn.setDoInput(true);
			// 设置是否使用缓存,post方式不能使用缓存
			if (isPost){
				conn.setUseCaches(false);
			}
			// 设置请求方式,默认为GET
			conn.setRequestMethod(requestMethod);
			// post方式需要将传递的参数输出到conn对象中
			if (isPost){
				DataOutputStream dos = new DataOutputStream(conn.getOutputStream());
				dos.writeBytes(parameters);
				dos.flush();
				dos.close();
			}
			// 从HttpURLConnection对象中读取响应的消息
			// 执行该语句时才正式发起请求
			is = conn.getInputStream();
		}catch(UnsupportedEncodingException e){
			e.printStackTrace();
		}catch(MalformedURLException e){
			e.printStackTrace();
		}catch(IOException e){
			e.printStackTrace();
		}
		return is;
	}

	public static void main(String args[]){
		String url = "https://api.apishop.net/common/checkcode/recognizeVerifyCodeComplicate";
		String requestMethod = "POST";
		Map<String, String> params = new HashMap<String, String>();			
		params.put("convertJPG", ""); //是否转换成jpg格式(有少量png或gif图转成jpg格式后识别率明显提高,但并不是所有png或gif转成jpg后都会提高识别率。) 此字段为1时表示需要把图片转为jpg格式,其他值不做转换操作。
    params.put("imgBASE64", ""); //图片文件的base64字符串。图片大小需要小于100KB。
    params.put("codeType", ""); //验证码类型,最大长度为10.(10:任意长度数字(成功率有所降低),11~19:1~9位数字,20:任意长度英文(成功率有所降低),21~29:1~9位英文,30:任意长度英数混合(成功率有所降低),31~39:1~9位英数混合,40:任意长度汉字(成功率有所降低),41~49:1~9位汉字,50:任意长度中英数混合(成功率有所降低)),如“34”代表四位英数混合	
		String result = null;
		try{
            InputStream is = httpRequestToStream(url, requestMethod, params);
			byte[] b = new byte[is.available()];
			is.read(b);
			result = new String(b);
		}catch(IOException e){
		    e.printStackTrace();
		}
		if (result != null){
		    JSONObject jsonObject = JSONObject.parseObject(result);
		    String status_code = jsonObject.getString("statusCode");
		    if (status_code == "000000"){
                // 状态码为000000, 说明请求成功
                System.out.println("请求成功:" + jsonObject.getString("result"));
		    }else{
                // 状态码非000000, 说明请求失败
                System.out.println("请求失败:" + jsonObject.getString("desc"));
            }
        }else{
            // 返回内容异常,发送请求失败,以下可根据业务逻辑自行修改
            System.out.println("发送请求失败");
        }
    }
}

Java调用阿里云短信接口发送手机验证码

Java调用阿里云短信接口发送手机验证码

前五步可参考阿里云服务文档:https://help.aliyun.com/document_detail/59210.html?spm=a2c4g.11174283.4.1.2b152c42DoJ7Mt

 

 

 

一、入驻阿里云

1.阿里云注册入口:点击注册页面

2.实名认证:点击进行实名认证

 

二、开通短信服务

1.开通短信服务:点击开通短信服务

2.进入控制台:点击查看控制台页面

 

三、获取AccessKey

1创建AccessKey: 点击创建AccessKey

2.获取AccessKey ID和AccessKey Secret:点击查看AccessKey ID和AccessKey Secret

记得保存AccessKey ID和 AccessKey Secret

 

四、创建短信签名和模版

 

1.创建签名前查看短信规则和审核规则:短信业务规则,审核规则

2.创建短信签名:点击查看创建短信签名

3.创建短信模版:点击查看创建短信模版

 

五、访问权限设置

设置访问权限控制:点击访问权限控制

 

六.Java调用接口代码

import com.aliyuncs.CommonRequest;
import com.aliyuncs.CommonResponse;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.exceptions.ServerException;
import com.aliyuncs.http.MethodType;
import com.aliyuncs.profile.DefaultProfile;
/*
pom.xml
<dependency>
  <groupId>com.aliyun</groupId>
  <artifactId>aliyun-java-sdk-core</artifactId>
  <version>4.0.3</version>
</dependency>
*/
public class SendSms {
    
    private String accessKeyId = "";      //输入你的AccessKey ID
    private String accessSecret = "";      //输入你的AccessKey Secret
    
    public static void sendMessage(String phoneNumber, String code) {        //手机号、验证码
        DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessSecret);
        IAcsClient client = new DefaultAcsClient(profile);

        CommonRequest request = new CommonRequest();
        request.setMethod(MethodType.POST);
        request.setDomain("dysmsapi.aliyuncs.com");
        request.setVersion("2017-05-25");
        request.setAction("SendSms");
        request.putQueryParameter("RegionId", "cn-hangzhou");
        request.putQueryParameter("PhoneNumbers", phoneNumber);
        request.putQueryParameter("SignName", "签名名称");                      //输入你的短信签名名称
        request.putQueryParameter("TemplateCode", "SMS_000000000");            //输入你的短信模板ID
        request.putQueryParameter("TemplateParam", " { \"code\":code }");    
        try {
            CommonResponse response = client.getCommonResponse(request);
            System.out.println(response.getData());
        } catch (ServerException e) {
            e.printStackTrace();
        } catch (ClientException e) {
            e.printStackTrace();
        }
    }
}

 

PHP图片验证码

PHP图片验证码

php图片验证码原代码,需支持gd2.dll扩展,需修改php.ini后重启iis or apache 调用方法img src=this.php ------------------------------------------------------ 程序代码: ?PHP session_start(); session_register(''SafeCode''); $type = ''gif''; $width= 4

php图片验证码原代码,需支持gd2.dll扩展,需修改php.ini后重启iis or apache

调用方法PHP图片验证码

------------------------------------------------------

程序代码:

session_start();
session_register(''SafeCode'');
$type = ''gif'';
$width= 40;
$height= 16;
header("Content-type: image/".$type);
srand((double)microtime()*1000000);
$randval = randStr(4,"");
if($type!=''gif'' && function_exists(''imagecreatetruecolor'')){
$im = @imagecreatetruecolor($width,$height);
}else{
$im = @imagecreate($width,$height);
}
$r = Array(225,211,255,223);
$g = Array(225,236,237,215);
$b = Array(225,236,166,125);

$key = rand(0,3);

$backColor = ImageColorAllocate($im,$r[$key],$g[$key],$b[$key]);//背景色(随机)
$borderColor = ImageColorAllocate($im, 0, 0, 0);//边框色
$pointColor = ImageColorAllocate($im, 255, 170, 255);//点颜色

@imagefilledrectangle($im, 0, 0, $width - 1, $height - 1, $backColor);//背景位置
@imagerectangle($im, 0, 0, $width-1, $height-1, $borderColor); //边框位置
$stringColor = ImageColorAllocate($im, 255,51,153);

for($i=0;$i$pointX = rand(2,$width-2);
$pointY = rand(2,$height-2);
@imagesetpixel($im, $pointX, $pointY, $pointColor);
}

@imagestring($im, 3, 5, 1, $randval, $stringColor);
$ImageFun=''Image''.$type;
$ImageFun($im);
@ImageDestroy($im);
$_SESSION[''SafeCode''] = $randval;
//产生随机字符串
function randStr($len=6,$format=''ALL'') {
switch($format) {
case ''ALL'':
$chars=''ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789''; break;
case ''CHAR'':
$chars=''ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz''; break;
case ''NUMBER'':
$chars=''0123456789''; break;
default :
$chars=''ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'';
break;
}
$string="";
while(strlen($string)$string.=substr($chars,(mt_rand()%strlen($chars)),1);
return $string;
}
?>

立即学习“PHP免费学习笔记(深入)”;

-----------------------------

// BY PHP 国度 www.phphot.be
//关闭报错
error_reporting(0);
//图片宽度
$x_size=60;
//图片高度
$y_size=20;
//生成4个随机字符
$nmsg=num_rand(4);
//支持安全通连接吗?
$S=$_SERVER[''SERVER_PORT'']==''443'' ? 1:0;
//使用cookie记录随机码
//expire=0 cookie将会在会话结束后(一般是浏览器关闭)失效。
setCookie(''ck_num'',md5($nmsg),0,''/'','''',$S);
//创建宽:60*20的图片(画布)
$aimg = imagecreate($x_size,$y_size);
//设置图片背景色
$back = imagecolorallocate($aimg, 255, 255, 255);
//设置字体颜色
$border = imagecolorallocate($aimg, 0, 0, 0);
//从0,0点填充59*19的白色矩形区域
imagefilledrectangle($aimg, 0, 0, $x_size - 1, $y_size - 1, $back);
//从0,0点绘制59*19的黑色矩形边框
imagerectangle($aimg, 0, 0, $x_size - 1, $y_size - 1, $border);

for ($i=0;$i     //在图片上写字
     imageString($aimg,5,$i*$x_size/4+3,2, $nmsg[$i],$border);
}
header("Content-type: image/png");
imagepng($aimg);
imagedestroy($aimg);exit;
function num_rand($lenth){
     // 播下一个随机数发生器种子
     //php自4.2.0起,,此参数变为可选项,当该项为空时,会被设为随时数
     mt_srand((double)microtime() * 1000000);
     //产生有4个随机数字的字符串
     for($i=0;$i           $randval.= mt_rand(0,9);
     }
     //对含有4个数字的字符串使用md5加密,长度是32位的
     //从3长度为32的字符中,自最小数起或最大数32-$lenth起,取长度为$lenth的字符串
     $randval=substr(md5($randval),mt_rand(0,32-$lenth),$lenth);
     return $randval;
}
?> 

*********************************************************

php图片验证码不显示

php图片验证码不显示

php图片验证码不显示

问题:

verify-1.jpg

错误一:

最基本的一个错误就是你很可能在php里面忘记安装gd模块了。window环境下面只需要在php.ini文件里面找到:

;extension=php_gd2.dll
登录后复制

把前面的分号去掉就可以了,重启apache后,你就可以在phpinfo()里面找到这个:

立即学习“PHP免费学习笔记(深入)”;

verify-2.jpg

如果是在ubuntu环境下面,你需要安装gd模块,命令是:

sudo apt-get install php5-gd
登录后复制

安装好了以后,也可以看到上面的模块。

错误二:

如果小伙伴经历上面的安装后,发现还是没有用,那么就可能是下面的问题了。

你的代码很可能是使用了像editpuls或者notepad++这样的文本编辑器编辑的,那么他们的默认编码格式就是有BOM的utf-8。UTF-8 BOM又叫UTF-8 签名,其实UTF-8 的BOM对UFT-8没有作用,是为了支持UTF-16,UTF-32才加上的BOM,BOM签名的意思就是告诉编辑器当前文件采用何种编码,方便编辑器识别,但是BOM虽然在编辑器中不显示,但是会产生输出,就像多了一个空行。

一般我用UTF-8无BOM格式,所以你需要将代码的编码格式改成无BOM格式。

错误三:

如果大家经历上面的两个步骤发现还是不起作用,那就要祭出杀手锏了。使用ob_clean()了,清除一下缓存。ob_clean这个函数的作用就是用来丢弃输出缓冲区中的内容,如果你的有许多生成的图片类文件,那么想要访问正确,就要经常清除缓冲区。

	public function create()
	{
		ob_clean();
		$a = new verify();
		session::set(&#39;captcha&#39;, strtolower($a->create(4, 15)));
		view::assign("captcha", $a);
		view::display("captcha");
		exit(0);
	}
登录后复制

注意:

大家如果使用较高的php版本,那么不能使用未定义变量,否则会报notice错误,$new_number和$_SESSION[''check_checks'']在使用前必须用isset判断一下或者你用老代码的话在最开始处加上error_reporting(E_ALL & ~E_NOTICE);屏蔽掉notice错误(不推荐),所以用isset()判断一下,来确保它被定义了,不然也有可能显示不出来验证码。

推荐教程:PHP视频教程

以上就是php图片验证码不显示的详细内容,更多请关注php中文网其它相关文章!

我们今天的关于PHP图片验证码识别(调用阿里云市场接口),函数来源:梦行云软件php 图片验证码的分享已经告一段落,感谢您的关注,如果您想了解更多关于eoLinker-API_Shop_验证码识别与生成类API调用的代码示例合集:六位图片验证码生成、四位图片验证码生成、简单验证码识别等、Java调用阿里云短信接口发送手机验证码、PHP图片验证码、php图片验证码不显示的相关信息,请在本站查询。

本文标签: