Server : Apache System : Linux iZ2vcgyutqttsd1p850kl8Z 3.10.0-1160.92.1.el7.x86_64 #1 SMP Tue Jun 20 11:48:01 UTC 2023 x86_64 User : www ( 1000) PHP Version : 5.6.40 Disable Function : passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv Directory : /www/wwwroot/saimikebio.com/mobile/include/ |
<?php /** * ECSHOP 验证码图片类 * ============================================================================ * * 版权所有 2005-2012 上海商派网络科技有限公司,并保留所有权利。 * 网站地址: http://www.ecshop.com; * ---------------------------------------------------------------------------- * 这不是一个自由软件!您只能在不用于商业目的的前提下对程序代码进行修改和 * 使用;不允许对程序代码以任何形式任何目的的再发布。 * ============================================================================ * $Author: liubo $ * $Id: cls_captcha.php 17217 2011-01-19 06:29:08Z liubo $ */ if (!defined('IN_ECTOUCH')) { die('Hacking attempt'); } class captcha { /** * 背景图片所在目录 * * @var string $folder */ var $folder = 'data/captcha'; /** * 图片的文件类型 * * @var string $img_type */ var $img_type = 'png'; /*------------------------------------------------------ */ //-- 存在session中的名称 /*------------------------------------------------------ */ var $session_word = 'captcha_word'; /** * 背景图片以及背景颜色 * * 0 => 背景图片的文件名 * 1 => Red, 2 => Green, 3 => Blue * @var array $themes */ var $themes_jpg = array( 1 => array('captcha_bg1.jpg', 255, 255, 255), 2 => array('captcha_bg2.jpg', 0, 0, 0), 3 => array('captcha_bg3.jpg', 0, 0, 0), 4 => array('captcha_bg4.jpg', 255, 255, 255), 5 => array('captcha_bg5.jpg', 255, 255, 255), ); var $themes_gif = array( 1 => array('captcha_bg1.gif', 255, 255, 255), 2 => array('captcha_bg2.gif', 0, 0, 0), 3 => array('captcha_bg3.gif', 0, 0, 0), 4 => array('captcha_bg4.gif', 255, 255, 255), 5 => array('captcha_bg5.gif', 255, 255, 255), ); /** * 图片的宽度 * * @var integer $width */ var $width = 130; /** * 图片的高度 * * @var integer $height */ var $height = 20; /** * 构造函数 * * @access public * @param * * @return void */ function __construct($folder = '', $width = 145, $height = 20) { $this->captcha($folder, $width, $height); } /** * 构造函数 * * @access public * @param string $folder 背景图片所在目录 * @param integer $width 图片宽度 * @param integer $height 图片高度 * @return bool */ function captcha($folder = '', $width = 145, $height = 20) { if (!empty($folder)) { $this->folder = $folder; } $this->width = $width; $this->height = $height; /* 检查是否支持 GD */ if (PHP_VERSION >= '4.3') { return (function_exists('imagecreatetruecolor') || function_exists('imagecreate')); } else { return (((imagetypes() & IMG_GIF) > 0) || ((imagetypes() & IMG_JPG)) > 0 ); } } /** * 检查给出的验证码是否和session中的一致 * * @access public * @param string $word 验证码 * @return bool */ function check_word($word) { $recorded = isset($_SESSION[$this->session_word]) ? base64_decode($_SESSION[$this->session_word]) : ''; $given = $this->encrypts_word(strtoupper($word)); return (preg_match("/$given/", $recorded)); } /** * 生成图片并输出到浏览器 * * @access public * @param string $word 验证码 * @return mix */ function generate_image($word = false) { if (!$word) { $word = $this->generate_word(); } /* 记录验证码到session */ $this->record_word($word); /* 验证码长度 */ $letters = strlen($word); /* 选择一个随机的方案 */ mt_srand((double) microtime() * 1000000); if (function_exists('imagecreatefromjpeg') && ((imagetypes() & IMG_JPG) > 0)) { $theme = $this->themes_jpg[mt_rand(1, count($this->themes_jpg))]; } else { $theme = $this->themes_gif[mt_rand(1, count($this->themes_gif))]; } if (!file_exists($this->folder . $theme[0])) { return false; } else { $img_bg = (function_exists('imagecreatefromjpeg') && ((imagetypes() & IMG_JPG) > 0)) ? imagecreatefromjpeg($this->folder . $theme[0]) : imagecreatefromgif($this->folder . $theme[0]); $bg_width = imagesx($img_bg); $bg_height = imagesy($img_bg); $img_org = ((function_exists('imagecreatetruecolor')) && PHP_VERSION >= '4.3') ? imagecreatetruecolor($this->width, $this->height) : imagecreate($this->width, $this->height); /* 将背景图象复制原始图象并调整大小 */ if (function_exists('imagecopyresampled') && PHP_VERSION >= '4.3') // GD 2.x { imagecopyresampled($img_org, $img_bg, 0, 0, 0, 0, $this->width, $this->height, $bg_width, $bg_height); } else // GD 1.x { imagecopyresized($img_org, $img_bg, 0, 0, 0, 0, $this->width, $this->height, $bg_width, $bg_height); } imagedestroy($img_bg); $clr = imagecolorallocate($img_org, $theme[1], $theme[2], $theme[3]); /* 绘制边框 */ //imagerectangle($img_org, 0, 0, $this->width - 1, $this->height - 1, $clr); /* 获得验证码的高度和宽度 */ $x = ($this->width - (imagefontwidth(5) * $letters)) / 2; $y = ($this->height - imagefontheight(5)) / 2; imagestring($img_org, 5, $x, $y, $word, $clr); header('Expires: Thu, 01 Jan 1970 00:00:00 GMT'); // HTTP/1.1 header('Cache-Control: private, no-store, no-cache, must-revalidate'); header('Cache-Control: post-check=0, pre-check=0, max-age=0', false); // HTTP/1.0 header('Pragma: no-cache'); if ($this->img_type == 'jpeg' && function_exists('imagecreatefromjpeg')) { header('Content-type: image/jpeg'); imageinterlace($img_org, 1); imagejpeg($img_org, false, 95); } else { header('Content-type: image/png'); imagepng($img_org); } imagedestroy($img_org); return true; } } /*------------------------------------------------------ */ //-- PRIVATE METHODs /*------------------------------------------------------ */ /** * 对需要记录的串进行加密 * * @access private * @param string $word 原始字符串 * @return string */ function encrypts_word($word) { return substr(md5($word), 1, 10); } /** * 将验证码保存到session * * @access private * @param string $word 原始字符串 * @return void */ function record_word($word) { $_SESSION[$this->session_word] = base64_encode($this->encrypts_word($word)); } /** * 生成随机的验证码 * * @access private * @param integer $length 验证码长度 * @return string */ function generate_word($length = 4) { $chars = '23456789ABCDEFGHJKLMNPQRSTUVWXYZ'; for ($i = 0, $count = strlen($chars); $i < $count; $i++) { $arr[$i] = $chars[$i]; } mt_srand((double) microtime() * 1000000); shuffle($arr); return substr(implode('', $arr), 5, $length); } } ?>