/**
  * 入口
  *
  * @author          mrmsl <*****@*****.**>
  * @date            2012-09-27 17:26:23
  * @lastmodify      2013-01-22 11:02:32 by mrmsl
  *
  * @return void 无返回值
  */
 public function indexAction()
 {
     $module = Filter::get('module', 'get');
     //模块
     $error = '';
     if (!APP_DEBUG) {
         //非调试模式
         if (!REFERER_PAGER) {
             $error = L('REFERER_PAGER,IS_EMPTY');
         } elseif (strpos(REFERER_PAGER, WEB_SITE_URL) === false) {
             $error = L('REFERER_PAGER') . '(' . REFERER_PAGER . ')' . L('IS_EMPTY');
         }
     }
     if (!$error) {
         if (!$module) {
             $error = 'module' . L('IS_EMPTY');
         } elseif (!in_array($module, $this->_verifycode_module)) {
             $error = 'module not in (' . join(',', $this->_verifycode_module) . ')';
         } else {
             $verifycode_setting = get_verifycode_setting($module);
             //验证码设置
             //未开启验证码
             if (!$verifycode_setting['enable']) {
                 $default_setting = get_verifycode_setting('sys', 'enable');
                 //默认设置
                 $error = L('NOT_HAS,TURN_ON') . "(module:{$verifycode_setting['enable']}|sys:{$default_setting})";
             }
         }
     }
     if ($error) {
         //有错误
         $log = get_method_line(__METHOD__, __LINE__, LOG_VERIFYCODE_ERROR) . L('VERIFY_CODE') . "({$module})" . $error;
         trigger_error($log);
         $exit = true;
     } elseif (!check_verifycode_limit($module, 'refresh')) {
         //刷新次数限制
         $exit = true;
     }
     if (!empty($exit)) {
         header('Content-type: image/png');
         readfile(IMGCACHE_PATH . 'common/images/verifycode_error.png');
         exit;
     }
     $width = $verifycode_setting['width'];
     //宽
     $height = $verifycode_setting['height'];
     //高
     $length = $verifycode_setting['length'];
     //字母长
     $type = $verifycode_setting['type'];
     //类型
     $img = new Verifycode();
     $img->buildVerifyImage($verifycode_setting['length'], $verifycode_setting['type'], $verifycode_setting['width'], $verifycode_setting['height']);
 }
Ejemplo n.º 2
0
/**
 * 验证验证码是否正确
 *
 * @author          mrmsl <*****@*****.**>
 * @date            2012-07-13 16:45:47
 * @lastmodify      2013-01-22 17:08:59 by mrmsl
 *
 * @param string $code   验证码
 * @param string $module 验证码模块
 *
 * @return mixed true正确,否则返回提示信息
 */
function check_verifycode($code, $module)
{
    static $_checked = array();
    if (isset($_checked[$module])) {
        //已经验证过
        return $_checked[$module];
    } elseif (!check_verifycode_limit($module)) {
        //错误次数限制
        $result = false;
    } else {
        $session = session(SESSION_VERIFY_CODE);
        $verifycode_setting = get_verifycode_setting($module);
        $verifycode_order = $verifycode_setting['order'];
        if (!$verifycode_setting['case']) {
            //不区分大小写
            $code = strtolower($code);
            $session = strtolower($session);
        }
        if (!is_numeric($verifycode_order)) {
            //非数字,$verifycode_order即为验证码
            $result = $code == $verifycode_order;
        } elseif (!$verifycode_order) {
            //验证码顺序
            $result = $code == $session;
        } elseif (($len = strlen($verifycode_order)) != strlen($code)) {
            //输入长度与顺序长度一致,避免abcd => abcde也通过
            $result = false;
        } else {
            for ($i = 0; $i < $len; $i++) {
                $n = $verifycode_order[$i] - 1;
                $result = isset($code[$i]) && isset($session[$n]) && $code[$i] == $session[$n];
            }
        }
    }
    $_checked[$module] = $result;
    return $result;
}