PHP中什么是magento check.phppri()

php中数字签名与校验
&openssl_pkey_new的使用实例
&$dn = array("countryName" =& 'XX',
"stateOrProvinceName" =& 'State', "localityName" =&
'SomewhereCity', "organizationName" =& 'MySelf',
"organizationalUnitName" =& 'Whatever', "commonName" =&
'mySelf', "emailAddress" =& '');
$privkeypass = '1234';
$numberofdays = 365;
$privkey = openssl_pkey_new();
$csr = openssl_csr_new($dn, $privkey);
$sscert = openssl_csr_sign($csr, null, $privkey,
$numberofdays);
openssl_x509_export($sscert, $publickey);
openssl_pkey_export($privkey, $privatekey, $privkeypass);
openssl_csr_export($csr, $csrStr);
echo $ // Will hold the exported PriKey
echo $& // Will hold the exported
echo $csrS&&&
// Will hold the exported Certificate
1. 先用php生成一对公钥和私钥
$res = openssl_pkey_new();
openssl_pkey_export($res,$pri);
$d= openssl_pkey_get_details($res);
$pub = $d['key'];
var_dump($pri,$pub);
输出依次为私钥和公钥的pem字串,如:
string(916) "-----BEGIN PRIVATE KEY-----
MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAKs124okAnX5jh1Q
wsETi80b4ZyYlYUSsAtvS7ZG+GSLAox24TKNwWIy5cUdKfK/5QEJjZ0S8LjRSYCG
to9LkwQTQrKY8BBXVCQQS3VXRqz4on9bmcGSyLMK6vQxt9NnJpk6aBmJE7z35+8z
TTLwdUbYaMAcYqrsYDfgBSNBgwbDAgMBAAECgYBvolJfpFMmcW3El6AlHIWPW5qj
7KmxdxnqmssXMvdLN4iV5f24ZM2vJdjDydxMN+st3fjEblEfcPcoIq5uiKx2bnO3
f9g0yt+qUoXdz4LK6jV1NfuAZDcnBm7CXfE7BDREgyiRg4ZXIvp4L0Y2zBMdFTmg
LKkXb2M1P3pK53UbwQJBANupqPXFQjdHvAa3voT+UI8OhmLbw/Vyh6Ii1glwMfyq
VS2lAakj9d1hqLYZvw+eNeZBnzZNPuMJg5aj/WKUqasCQQDHiFLS7Yb1rbhfjmRt
ZL4zXuvX1hVjTNo2TeZwPniGpYa+QHcauDDep5C9q//n+D+ZtkbkECxpOVhrUHSI
KO9JAkEApl3lHd98uymVevEHVurWUMMLfSw9SlSn7WC9AwD6mwbW5G8oxtX5jOY+
RU1Sq52D7RSeZR40FvhJtXoWmudFaQJAc8E+a2epF/YENEtjL6N2RE8Y+0oTdlwr
a72dphhXy6VTmiPD9RhOIZ2MdrzF5Uk7fG0mi0Bmw1SlWvx93lABIQJBALXPeoNa
b4dQkRkfqCHtyrWOeRcC1Y6FyTfNj+cRBzdIcmFc21hxj6HKy2M6/XGI3rAE5L+B
mmlSmN1enhoCUqc=
-----END PRIVATE KEY-----
string(272) "-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCrNduKJAJ1+Y4dUMLBE4vNG+Gc
mJWFErALb0u2RvhkiwKMduEyjcFiMuXFHSnyv+UBCY2dEvC40UmAhraPS5MEE0Ky
mPAQV1QkEEt1V0as+KJ/W5nBksizCur0MbfTZyaZOmgZiRO89+fvM00y8HVG2GjA
HGKq7GA34AUjQYMGwwIDAQAB
-----END PUBLIC KEY-----
2. 保存好自己的私钥,把公钥可以公开给别人。如果需要对某数据进行签名,证明那数据是从你这里发出的,就需要用私钥:
$res = openssl_pkey_get_private($pri);
if (openssl_sign('hello', $out, $res))
var_dump(base64_encode($out));
上例中 $pri 为自己的私钥,'hello' 为待签名的数据,如果签名成功,最后输出为base64编码后的签名,如:
j19H+C/NQEcyowezOQ+gmGi2UoPJNXyJ+KwpkEzJ5u4qaRD3cY4qhfFfIosypypwJTJ4LjRYOIPNQMQm6ICj2nMdGfn/p/pp7il+xGz2aUWdOXkJFgIc/PGC95C9sLH04Tc6QSuV5IMd9rjBjyv+ieokMLFm9cmtN2hGag9vq1s=
3. 别人收到你的数据 'hello' 和签名字串,想验证这是从你发来的数据的话,用你公开的公钥验证:
$sig = base64_decode($sig);
$res = openssl_pkey_get_public($pubkey);
if (openssl_verify('hello', $sig, $res) === 1)
; // 通过验证
上例中刚开始的 $sig 为之前你base64编码过的签名, $pubkey 为你的公钥
php中这种签名使用的是RSA算法;数字签名可以在
等系统中派上用场。
原文:/voice0525/blog/item/adfff5edc1835eeab3fb9508.html
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。PHP中的按位与和按位或操作
按位与主要是对二进制数操作。
$c = $a^b; &
echo $c &// 3 &
这里不是单纯的相加关系 &
& &十进制 1换算成二进制 &
& &十进制 2换算成二进制 &
& &按位^ & & & & & & & & & & &
& // 就是不相同的都算成1 啦 ^_^
$a = 1; &&
$b = 2; &&
echo $a & $c; &// 1 &&
十进制 3换算成二进制
十进制 1换算成二进制
// 就是各个位数相同的不变否则都算成0
最后介绍下用法 ; 按位&后返回值是没意义的。 主要是用来判断$a 是否存在于 $c // 权限用法比较多。
$my_privilege = 15; &// 1+2+4+8 拥有全部权限 &
$Pri = ''; &
$privilege_arr = array(8=&'增', 4=&'删',2=&'改',1=&'查'); &
foreach($privilege_arr as $k =&$v){ &
& $k & $my_privilege && &$Pri .= '我有'.$v.'的权力&br&'; &你的位置: >
> php中使用mb_check_encoding判断字符串编码的一些思考
在使用mbstring库时看到这个方法,有点惊喜,难道有内置的方法能直接判断字符串编码?于是立马进行了测试。
测试的思路
先用纯数字和英文字母组合,然后分别指定utf-8,gbk编码来进行测试。因为gbk字符集和utf-8字符集都包含ascii字符集,所以理论上结果应当都是true
给定一个gbk编码的文字符串,包含英文、数字和中文,然后分别指定utf-8,gbk编码来进行测试。指定utf-8编码的输出结果应当为false,指定gbk编码的输出结果应当为true。
给定一个utf-8编码的字符串,包含英文、数字和中文,然后分别指定utf-8,gbk编码来进行测试。指定utf-8编码的输出结果应当为true,指定gbk编码的输出结果应当为false。
纯数字和英文字母组合
$utf8Str = &I have 4 books and 2 magazines to check out. &;
var_dump(mb_check_encoding($utf8Str,'utf-8')); //输出true
var_dump(mb_check_encoding($utf8Str,'gbk')); //输出true
这样的结果一般没有什么其他疑问,事实上如果用bin2hex来查看字符串的16进制码,不管是utf-8编码,还是gbk编码,都是一样的。
$utf8Str = &I have 4 books and 2 magazines to check out. &;
echo bin2hex($utf8Str);
$gbkStr = mb_convert_encoding($utf8Str, 'gbk', 'utf-8');
echo bin2hex($gbkStr);
上面两个的输出是一样的。
gbk编码的字符串
$str = '迷你tablet或于本月23日发布。';
var_dump(mb_check_encoding($str,'utf-8'));
//输出false
var_dump(mb_check_encoding($str,'gbk')); //输出true
utf-8编码的字符串
$str = '迷你tablet或于本月23日发布。';
var_dump(mb_check_encoding($str,'utf-8'));
//输出true
var_dump(mb_check_encoding($str,'gbk')); //输出false
本来看到上面结果应该挺好的。可是我对此心存疑惑。因为gbk和uft-8的编码方式,如果判断单个字应当没有问题,可是多个字符的时候,就可能存在问题。例如3个gbk编码的汉字,就是6个字节,那么有可能也是utf-8编码中的2个汉字。经过多次尝试,找到了这样的字符串
$utf8Str = '我abc是谁';
var_dump(mb_check_encoding($utf8Str, 'utf-8'));
//输出true
var_dump(mb_check_encoding($utf8Str, 'gbk')); //输出true
尽管是utf-8的字符串,但是在指定gbk判断时也是true。
虽然最后问题没有解决,但是这样的思考还是蛮有意义的,希望汉字编码能尽快统一标准。
转载请注明: &
与本文相关的文章PHP容易MVC架构 - PHP当前位置:& &&&PHP容易MVC架构PHP容易MVC架构&&网友分享于:&&浏览:38次PHP简单MVC架构由于需要搭建一个简单的框架来进行API接口开发,所以简单的mvc框架当然是首选.最原始,最简洁的mvc框架.下面来介绍下.
& & & & 一. 项目目录结构:
|-controller&&& 存放控制器文件&
|-model&&& &&& 存放模型文件&
|-view&&& &&& 存放视图文件&&&&
|-lib&&& &&& 存放自定义类库&
|-config&&& 存放配置文件&
|--config.php&& 系统配置文件&
|--conn.php&& 数据库连接文件&
|--db_config.php&&
数据库配置文件&
|-mysql_db.php&&& 数据库类文件&
|-runtime&&& 缓存文件
db_caches 数据库缓存文件
logs日志文件
|-index.php&&& 入口文件&
| -dispatcher.php
-loader.php
-router.php
二.项目架构
1.先介绍index.php,附源码:
include(&./core/ini.php&);
include(&./core/config/config.php&);
include(&./core/global.fun.php&);
include(&./core/common.php&);
initializer::initialize();//加载将要用到的目录文件,即调用initializer类的一个静态函数initialize,因为我们在ini.php,设置了include_path,以及定义了__autoload,所以程序会自动在core/main目录查找initializer.php.
$router = loader::load(&router&);//加载URL处理文件,对url进行解析--加载loader函数的静态函数load
dispatcher::dispatch($router);//router.php文件,这个文件的作用就是映射URL,对URL进行解析.根据解析到的URL参数加载相关controller及action
2.初始化项目文件
./core/ini.php 源码:
set_include_path(get_include_path() . PATH_SEPARATOR . &core/main&);
//set_include_path — Sets the include_path configuration option
function __autoload($object){
require_once(&{$object}.php&);
这个文件首先设置了include_path,也就是我们如果要找包含的文件,告诉系统在这个目录下查找。其实我们定义__autoload()方法,这个方法是在PHP5增加的,就是当我们实例化一个函数的时候,如果本文件没有,就会自动去加载文件
3.加载系统配置文件./core/config.php
* 设置页面编码格式
header(&content-type:text/charset=utf-8&);
//禁用错误报告
error_reporting(0);
date_default_timezone_set(&PRC&);
//定义常量
define(&URL_PATH&,&http://blog.csdn.net/haiqiao_2010&);//服务器IP
define('IMG_PATH',&http://blog.csdn.net/haiqiao_2010&);//服务器图片目录
//判断日志是否开启
defined(&APP_LOG&) or define(&APP_LOG&,true);
if (APP_LOG) {
$GLOBALS['log'] = new APIlog();
set_exception_handler(array($GLOBALS['log'],'quit'));
set_error_handler(array($GLOBALS['log'],'error_handle'));
define('IS_CGI',substr(PHP_SAPI, 0,3)=='cgi' ? 1 : 0 );
define('IS_WIN',strstr(PHP_OS, 'WIN') ? 1 : 0 );
define('IS_CLI',PHP_SAPI=='cli'? 1
if(!defined('APP_NAME')) define('APP_NAME', basename(dirname($_SERVER['SCRIPT_FILENAME'])));
if(!IS_CLI) {
// 当前文件名
if(!defined('_PHP_FILE_')) {
if(IS_CGI) {
//CGI/FASTCGI模式下
= explode('.php',$_SERVER[&PHP_SELF&]);
define('_PHP_FILE_',
rtrim(str_replace($_SERVER[&HTTP_HOST&],'',$_temp[0].'.php'),'/'));
define('_PHP_FILE_',
rtrim($_SERVER[&SCRIPT_NAME&],'/'));
if(!defined('__ROOT__')) {
// 网站URL根目录
if( strtoupper(APP_NAME) == strtoupper(basename(dirname(_PHP_FILE_))) ) {
$_root = dirname(dirname(_PHP_FILE_));
$_root = dirname(_PHP_FILE_);
define('__ROOT__',
(($_root=='/' || $_root=='\\')?'':$_root));
//支持的URL模式
define('URL_COMMON',
//普通模式
define('URL_PATHINFO',
//PATHINFO模式
define('URL_REWRITE',
//REWRITE模式
define('URL_COMPAT',
// 兼容模式
if(!defined('APP_ROOT')) {//项目根路径
// 网站URL根目录
$_root = dirname(_PHP_FILE_);
$_root = (($_root=='/' || $_root=='\\')?'':$_root);
$_root = str_replace(&/system&,&&,$_root);
define('APP_ROOT', $_root
if(!defined('APP_ROOT_PATH'))//项目绝对路径
define('APP_ROOT_PATH', str_replace(&\\&,&/&,substr(dirname(__FILE__),0,-11)));
if(!defined('PAGE_SIZE'))//im:页面大小
define('PAGE_SIZE',15);
4.加载通用的方法的文件./core/global_fun.php
& &//header(&content-type:text/charset=utf-8&);
* & 过滤sql语句的关键字
& & function strip_sql($string){
& global $search_arr,$replace_
& return is_array($string) ? array_map('strip_sql', $string) : preg_replace($search_arr, $replace_arr, $string);
& &function new_htmlspecialchars($string){
return is_array($string) ? array_map('new_htmlspecialchars', $string) : htmlspecialchars($string,ENT_QUOTES);
& &function new_addslashes($string){
if(!is_array($string)) return addslashes($string);
foreach($string as $key =& $val) $string[$key] = new_addslashes($val);
& &function new_stripslashes($string)
if(!is_array($string)) return stripslashes($string);
foreach($string as $key =& $val) $string[$key] = new_stripslashes($val);
& &function strip_textarea($string){
return nl2br(str_replace(' ', '&', htmlspecialchars($string, ENT_QUOTES)));
& &function strip_js($string, $js = 1){
$string = str_replace(array(&\n&,&\r&,&\&&),array('','',&\\\&&),$string);
return $js==1 ? &document.write(\&&.$string.&\&);\n& : $
& &//邮件格式验证的函数
& &function check_email($email)
& & if(!preg_match(&/^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/&,$email))
& &//验证手机号码
& &function check_mobile($mobile)
$pattern = &/^1\d{10}$/&;
if (preg_match($pattern,$mobile))
& &//获取GMTime
& &function get_gmtime()
& & return (time() - date('Z'));
& &function to_date($utc_time, $format = 'Y-m-d H:i:s') {
& & if (empty ( $utc_time )) {
return '';
& & $timezone = 8;
& & $time = $utc_time + $timezone * 3600;
& & return date ($format, $time );
& &function to_timespan($str, $format = 'Y-m-d H:i:s')
& & $timezone = 8;
& & $time = intval(strtotime($str));
& & if($time!=0)
$time = $time - $timezone * 3600;
& & return $
& &function get_http()
& & return (isset($_SERVER['HTTPS']) && (strtolower($_SERVER['HTTPS']) != 'off')) ? 'https://' : 'http://';
& &function get_domain()
& & /* 协议 */
& & $protocol = get_http();
& & /* 域名或IP地址 */
& & if (isset($_SERVER['HTTP_X_FORWARDED_HOST']))
$host = $_SERVER['HTTP_X_FORWARDED_HOST'];
& & elseif (isset($_SERVER['HTTP_HOST']))
$host = $_SERVER['HTTP_HOST'];
/* 端口 */
if (isset($_SERVER['SERVER_PORT']))
$port = ':' . $_SERVER['SERVER_PORT'];
if ((':80' == $port && 'http://' == $protocol) || (':443' == $port && 'https://' == $protocol))
$port = '';
$port = '';
if (isset($_SERVER['SERVER_NAME']))
$host = $_SERVER['SERVER_NAME'] . $
elseif (isset($_SERVER['SERVER_ADDR']))
$host = $_SERVER['SERVER_ADDR'] . $
& & return $protocol . $
& &function get_host()
& & /* 域名或IP地址 */
& & if (isset($_SERVER['HTTP_X_FORWARDED_HOST']))
$host = $_SERVER['HTTP_X_FORWARDED_HOST'];
& & elseif (isset($_SERVER['HTTP_HOST']))
$host = $_SERVER['HTTP_HOST'];
if (isset($_SERVER['SERVER_NAME']))
$host = $_SERVER['SERVER_NAME'];
elseif (isset($_SERVER['SERVER_ADDR']))
$host = $_SERVER['SERVER_ADDR'];
& & return $
&* 实现AES加密
* $str : 要加密的字符串
* $keys : 加密密钥
* $iv : 加密向量
* $cipher_alg : 加密方式
function aes_ecryptdString($str,$keys=&6450&,$iv=&3450&,$cipher_alg=MCRYPT_RIJNDAEL_128){
$encrypted_string= base64_encode(bin2hex(mcrypt_encrypt($cipher_alg,$keys, $str, MCRYPT_MODE_CBC,$iv)));
$encrypted_string= bin2hex(mcrypt_encrypt($cipher_alg,$keys, $str, MCRYPT_MODE_CBC,$iv));
return $encrypted_
&* 实现AES解密
* $str : 要解密的字符串
* $keys : 加密密钥
* $iv : 加密向量
* $cipher_alg : 加密方式
function aes_decryptString($str,$keys=&6450&,$iv=&3450&,$cipher_alg=MCRYPT_RIJNDAEL_128){
$str= base64_decode($str);
$decrypted_string= mcrypt_decrypt($cipher_alg,$keys,pack(&H*&,$str),MCRYPT_MODE_CBC,$iv);
return $decrypted_
&* 对数组进行转码操作
&* @param $array
&* @param $in_charset
&* @param $out_charset
function iconv_array(&$array,$in_charset,$out_charset)
if(UC_CHARSET!='utf-8')
foreach($array as $k=&$v)
if(is_array($array[$k]))
iconv_array($array[$k],$in_charset,$out_charset);
$array[$k] = iconv($in_charset,$out_charset,$array[$k]);
&* utf8字符转Unicode字符
&* @param string $char 要转换的单字符
&* @return void
function utf8_to_unicode($char)
switch(strlen($char))
return ord($char);
$n = (ord($char[0]) & 0x3f) && 6;
$n += ord($char[1]) & 0x3f;
return $n;
$n = (ord($char[0]) & 0x1f) && 12;
$n += (ord($char[1]) & 0x3f) && 6;
$n += ord($char[2]) & 0x3f;
return $n;
$n = (ord($char[0]) & 0x0f) && 18;
$n += (ord($char[1]) & 0x3f) && 12;
$n += (ord($char[2]) & 0x3f) && 6;
$n += ord($char[3]) & 0x3f;
return $n;
&* utf8字符串分隔为unicode字符串
&* @param string $str 要转换的字符串
&* @param string $depart 分隔,默认为空格为单字
&* @return string
function str_to_unicode_word($str,$depart=' ')
$arr = array();
$str_len = mb_strlen($str,'utf-8');
for($i = 0;$i & $str_$i++)
$s = mb_substr($str,$i,1,'utf-8');
if($s != ' ' && $s != ' ')
$arr[] = 'ux'.utf8_to_unicode($s);
return implode($depart,$arr);
&* utf8字符串分隔为unicode字符串
&* @param string $str 要转换的字符串
&* @return string
function str_to_unicode_string($str)
$string = str_to_unicode_word($str,'');
function div_str($str)
require_once APP_ROOT_PATH.&core/lib/words.php&;
$words = words::segment($str);
$words[] = $
&* @desc &im:十进制数转换成三十六机制数
&* @param (int)$num 十进制数
&* return 返回:三十六进制数
function get_code_bynum($num) {
$num = intval($num);
if ($num &= 0)
$codeArr = array(&0&,&1&,&2&,&3&,&4&,&5&,&6&,&7&,&8&,&9&,'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z');
$code = '';
$key = ($num - 1) % 36;
$code = $codeArr[$key] . $
$num = floor(($num - $key) / 36);
} while ($num & 0);
&* @desc &im:三十六进制数转换成十机制数
&* @param (string)$str 三十六进制数
&* return 返回:十进制数
function get_num_bycode($str){
$array=array(&0&,&1&,&2&,&3&,&4&,&5&,&6&,&7&,&8&,&9&,&A&, &B&, &C&, &D&,&E&, &F&, &G&, &H&, &I&, &J&, &K&, &L&,&M&, &N&, &O&,&P&, &Q&, &R&, &S&, &T&, &U&, &V&, &W&, &X&, &Y&,&Z&);
$len=strlen($str);
for($i=0;$i&$$i++){
$index=array_search($str[$i],$array);
$sum+=($index+1)*pow(36,$len-$i-1);
5.加载公共方法的文件./core/common.php
function app_conf($name)
$GLOBALS['db']-&getOne(&select value from &.DB_PREFIX.&conf where name='&.$name.&'&);
* @des:im:验证手机号码
* @param:$phone
function check_phone($phone)
if(!empty($phone) && !preg_match(&/^1\d{10}$/&,$phone))
get_pwd_strength()im:根据密码字符串判断密码结构
* @param (string)$mobile
* return 返回:$msg
function get_pwd_strength($pwd){
if (strlen(iconv('UTF-8','GBK',$pwd))&30 || strlen(iconv('UTF-8','GBK',$pwd))&6)
return '密码是6-30位的字符串,且必须由字母和数字组成.';
if(preg_match(&/^\d+$/&,$pwd))
return '密码不能为全数字';//全数字
if(preg_match(&/^[a-z]+$/i&,$pwd))
return '密码不能为全字母';//全字母
if(!preg_match(&/^[A-Za-z0-9]+$/&,$pwd))
return '密码只能包含字母和数字';//有数字有字母 &;
/*ajax返回*/
function ajax_return($data)
header(&Content-Type:text/ charset=utf-8&);
echo(json_encode($data));
echo(base64_encode(json_encode($data)));
if (APP_LOG) {
$GLOBALS['log']-&quit($data);
* 字符串加密函数
* @param string $txt
* @param string $key
* @return string
function passport_encrypt($txt, $key = 'IMEMBER_2013') {
srand((double)microtime() * 1000000);
$encrypt_key = md5(rand(0, 32000));
$tmp = '';
for($i = 0;$i & strlen($txt); $i++) {
$ctr = $ctr == strlen($encrypt_key) ? 0 : $
$tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]);
return base64_encode(passport_key($tmp, $key));
* 字符串解密函数
* @param string $txt
* @param string $key
* @return string
function passport_decrypt($txt, $key = 'IMEMBER_2013') {
$txt = passport_key(base64_decode($txt), $key);
$tmp = '';
for($i = 0;$i & strlen($txt); $i++) {
if (empty($txt[$i+1])) {
$md5 = $txt[$i];
$tmp .= $txt[++$i] ^ $md5;
function passport_key($txt, $encrypt_key) {
$encrypt_key = md5($encrypt_key);
$tmp = '';
for($i = 0; $i & strlen($txt); $i++) {
$ctr = $ctr == strlen($encrypt_key) ? 0 : $
$tmp .= $txt[$i] ^ $encrypt_key[$ctr++];
* 传入图片的地址,自动修复图片的相对路径(如 ./public/logo.png)到绝对路径(如http://www.imember.cc/public/logo.png)
* @param unknown $img_path
function imagePathRevise($img_path){
//判断$img_path的路径是否以http://开头
if (preg_match('/^http:\/\//', $img_path)) {
return $img_
return IMG_PATH.preg_replace('/^\.\//', '', $img_path);
//utf8 字符串截取
function msubstr($str, $start=0, $length=15, $charset=&utf-8&, $suffix=true)
if(function_exists(&mb_substr&))
mb_substr($str, $start, $length, $charset);
if($suffix&$slice!=$str) return $slice.&…&;
elseif(function_exists('iconv_substr')) {
return iconv_substr($str,$start,$length,$charset);
$re['utf-8']
= &/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xff][\x80-\xbf]{3}/&;
$re['gb2312'] = &/[\x01-\x7f]|[\xb0-\xf7][\xa0-\xfe]/&;
$re['gbk']
= &/[\x01-\x7f]|[\x81-\xfe][\x40-\xfe]/&;
$re['big5']
= &/[\x01-\x7f]|[\x81-\xfe]([\x40-\x7e]|\xa1-\xfe])/&;
preg_match_all($re[$charset], $str, $match);
$slice = join(&&,array_slice($match[0], $start, $length));
if($suffix&&$slice!=$str) return $slice.&…&;
6.加载./initializer.php,initializer()用于将所有公用的文件目录在此函数里声明
initializer::initialize();
这就话就是调用initializer类的一个静态函数initialize,因为我们在ini.php,设置了include_path,以及定义了__autoload,所以程序会自动在core/main目录查找initializer.php.
定义了一个静态函数,initialize函数,这个函数就是设置include_path,这样,以后如果包含文件,或者__autoload,就会去这些目录下查找。
class initializer
public static function initialize() {
set_include_path(get_include_path().PATH_SEPARATOR . &core/main&);
set_include_path(get_include_path().PATH_SEPARATOR . &core/main/cache&);
set_include_path(get_include_path().PATH_SEPARATOR . &core/helpers&);
set_include_path(get_include_path().PATH_SEPARATOR . &core/libraries&);
set_include_path(get_include_path().PATH_SEPARATOR . &core/config&);
set_include_path(get_include_path().PATH_SEPARATOR . &app/controllers&);
set_include_path(get_include_path().PATH_SEPARATOR.&app/models&);
set_include_path(get_include_path().PATH_SEPARATOR.&app/views&);
7.加载./loader.php文件,源码:
class loader
private static $loaded = array();
public static function load($object){
$valid = array(
&library&,
if (!in_array($object,$valid)){
throw new Exception(&Not a valid object '{$object}' to load&);
ajax_return(array('recode'=&&0003&,'msg'=&&非法操作&,&data&=&&Not a valid object '{$object}' to load&));
if (empty(self::$loaded[$object])){
self::$loaded[$object]= new $object();
return self::$loaded[$object];
8.加载控制层文件./router.php,源码:
class router
public function __construct()
//base64_decode(str)解码
$routeParts=$_GET;
$routeParts=base64_decode($_GET);
if (!isset($routeParts['c'])){
ajax_return(array('recode'=&&0003&,'msg'=&&非法操作&,'data'=&&Controller is null&));
$this-&route = $routeParts['c'];
$this-&controller=$routeParts['c'];
$this-&action=isset($routeParts['act'])? $routeParts['act']:&index&;
array_shift($routeParts);
array_shift($routeParts);
$this-&params=$routeP
public function getAction() {
if (empty($this-&action)) $this-&action=&index&;
return $this-&
public function getController()
return $this-&
public function getParams()
return $this-&
9.加载数据库连接文件./core/conn.php,源码:
* 数据库连接
//第一种方法:直接写入数据库连接参数
$dblink=mysql_connect(&127.0.0.1:3306&,&sara&,&abc123&);
mysql_select_db(&ipolarbear&,$dblink);
mysql_query(&SET NAMES UTF8&);
if (!$dblink) {
mysql_query(&SET NAMES UTF8&);
die (json_encode(array('recode'=&&0009&,'msg'=&&连接数据库失败& . mysql_error (),'data'=&'')));
//第二种方法:定义DB类,加载数据库配置,对数据库SQL进行封装
//加载数据库配置
$dbcfg = require APP_ROOT_PATH.&core/config/db_config.php&;
if(!defined('DB_PREFIX'))//im:数据库表前缀
define('DB_PREFIX', $dbcfg['DB_PREFIX']);
if(!file_exists(APP_ROOT_PATH.'core/runtime/db_caches/'))
mkdir(APP_ROOT_PATH.'core/runtime/db_caches/',0777);
$pconnect =
$GLOBALS['db'] = new mysql_db($dbcfg['DB_HOST'].&:&.$dbcfg['DB_PORT'], $dbcfg['DB_USER'],$dbcfg['DB_PWD'],$dbcfg['DB_NAME'],'utf8',$pconnect);
mysql_query(&SET NAMES UTF8&);//相当于character_set_client(),character_set_connection(),character_set_results()客户端 连接器 返回值三者同时设置编码方式
//检查PHP是否连接上MYSQL
if(mysqli_connect_errno()){
die (json_encode(array('recode'=&&0009&,'msg'=&&连接数据库失败:& . mysql_error (),'data'=&'')));
//end 定义DB
10.加载数据库配置文件./core/db_config.php,源码:
return array(
'DB_HOST'=&'localhost',
'DB_NAME'=&'ip',
'DB_USER'=&'sara',
'DB_PWD'=&'abc123',
'DB_PORT'=&'3306',
'DB_PREFIX'=&'base_',
11.加载数据库类文件./core/mysql_db.php,源码:
class mysql_db
var $link_id
var $settings
= array();
var $queryCount = 0;
var $queryTime
var $queryLog
= array();
var $max_cache_time = 60; // 最大的缓存时间,以秒为单位
var $cache_data_dir = 'core/runtime/db_caches/';
var $root_path
var $error_message
= array();
var $platform
var $version
var $dbhash
var $starttime
var $timeline
var $timezone
var $mysql_config_cache_file_time = 0;
var $mysql_disable_cache_tables = array(); // 不允许被缓存的表,遇到将不会进行缓存
function __construct($dbhost, $dbuser, $dbpw, $dbname = '', $charset = 'utf8', $pconnect = 0, $quiet = 0)
$this-&mysql_db($dbhost, $dbuser, $dbpw, $dbname, $charset, $pconnect, $quiet);
function mysql_db($dbhost, $dbuser, $dbpw, $dbname = '', $charset = 'utf8', $pconnect = 0, $quiet = 0)
if (defined('APP_ROOT_PATH') && !$this-&root_path)
$this-&root_path = APP_ROOT_PATH;
if ($quiet)
$this-&connect($dbhost, $dbuser, $dbpw, $dbname, $charset, $pconnect, $quiet);
$this-&settings = array(
=& $dbhost,
=& $dbuser,
=& $dbname,
=& $charset,
'pconnect' =& $pconnect
function connect($dbhost, $dbuser, $dbpw, $dbname = '', $charset = 'utf8', $pconnect = 0, $quiet = 0)
if ($pconnect)
if (!($this-&link_id = @mysql_pconnect($dbhost, $dbuser, $dbpw)))
if (!$quiet)
$this-&ErrorMsg(&Can't pConnect MySQL Server($dbhost)!&);
if (PHP_VERSION &= '4.2')
$this-&link_id = @mysql_connect($dbhost, $dbuser, $dbpw, true);
$this-&link_id = @mysql_connect($dbhost, $dbuser, $dbpw);
mt_srand((double)microtime() * 1000000); // 对 PHP 4.2 以下的版本进行随机数函数的初始化工作
if (!$this-&link_id)
if (!$quiet)
$this-&ErrorMsg(&Can't Connect MySQL Server($dbhost)!&);
$this-&dbhash
= md5($this-&root_path . $dbhost . $dbuser . $dbpw . $dbname);
$this-&version = mysql_get_server_info($this-&link_id);
/* 如果mysql 版本是 4.1+ 以上,需要对字符集进行初始化 */
if ($this-&version & '4.1')
if ($charset != 'latin1')
mysql_query(&SET character_set_connection=$charset, character_set_results=$charset, character_set_client=binary&, $this-&link_id);
if ($this-&version & '5.0.1')
mysql_query(&SET sql_mode=''&, $this-&link_id);
$sqlcache_config_file = $this-&root_path . $this-&cache_data_dir . 'sqlcache_config_file_' . $this-&dbhash . '.php';
@include($sqlcache_config_file);
$this-&starttime = time();
if ($this-&max_cache_time && $this-&starttime & $this-&mysql_config_cache_file_time + $this-&max_cache_time)
if ($dbhost != '.')
$result = mysql_query(&SHOW VARIABLES LIKE 'basedir'&, $this-&link_id);
= mysql_fetch_assoc($result);
if (!empty($row['Value']{
1}) && $row['Value']{
1} == ':' && !empty($row['Value']{
2}) && $row['Value']{
2} == &\\&)
$this-&platform = 'WINDOWS';
$this-&platform = 'OTHER';
$this-&platform = 'WINDOWS';
if ($this-&platform == 'OTHER' &&
($dbhost != '.' && strtolower($dbhost) != 'localhost:3306' && $dbhost != '127.0.0.1:3306') ||
(PHP_VERSION &= '5.1' && date_default_timezone_get() == 'UTC'))
$result = mysql_query(&SELECT UNIX_TIMESTAMP() AS timeline, UNIX_TIMESTAMP('& . date('Y-m-d H:i:s', $this-&starttime) . &') AS timezone&, $this-&link_id);
= mysql_fetch_assoc($result);
if ($dbhost != '.' && strtolower($dbhost) != 'localhost:3306' && $dbhost != '127.0.0.1:3306')
$this-&timeline = $this-&starttime - $row['timeline'];
if (PHP_VERSION &= '5.1' && date_default_timezone_get() == 'UTC')
$this-&timezone = $this-&starttime - $row['timezone'];
$content = '&' . &?php\r\n& .
'$this-&mysql_config_cache_file_time = ' . $this-&starttime . &;\r\n& .
'$this-&timeline = ' . $this-&timeline . &;\r\n& .
'$this-&timezone = ' . $this-&timezone . &;\r\n& .
'$this-&platform = ' . &'& . $this-&platform . &';\r\n?& . '&';
@file_put_contents($sqlcache_config_file, $content);
/* 选择数据库 */
if ($dbname)
if (mysql_select_db($dbname, $this-&link_id) === false )
if (!$quiet)
$this-&ErrorMsg(&Can't select MySQL database($dbname)!&);
function select_database($dbname)
return mysql_select_db($dbname, $this-&link_id);
function set_mysql_charset($charset)
/* 如果mysql 版本是 4.1+ 以上,需要对字符集进行初始化 */
if ($this-&version & '4.1')
if (in_array(strtolower($charset), array('gbk', 'big5', 'utf-8', 'utf8')))
$charset = str_replace('-', '', $charset);
if ($charset != 'latin1')
mysql_query(&SET character_set_connection=$charset, character_set_results=$charset, character_set_client=binary&, $this-&link_id);
function fetch_array($query, $result_type = MYSQL_ASSOC)
return mysql_fetch_array($query, $result_type);
function query($sql, $type = '')
if ($this-&link_id === NULL)
$this-&connect($this-&settings['dbhost'], $this-&settings['dbuser'], $this-&settings['dbpw'], $this-&settings['dbname'], $this-&settings['charset'], $this-&settings['pconnect']);
$this-&settings = array();
if ($this-&queryCount++ &= 99)
$this-&queryLog[] = $
if ($this-&queryTime == '')
if (PHP_VERSION &= '5.0.0')
$this-&queryTime = microtime(true);
$this-&queryTime = microtime();
/* 当当前的时间大于类初始化时间的时候,自动执行 ping 这个自动重新连接操作 */
if (PHP_VERSION &= '4.3' && time() & $this-&starttime + 1)
mysql_ping($this-&link_id);
if (!($query = mysql_query($sql, $this-&link_id)) && $type != 'SILENT')
$this-&error_message[]['message'] = 'MySQL Query Error';
$this-&error_message[]['sql'] = $
$this-&error_message[]['error'] = mysql_error($this-&link_id);
$this-&error_message[]['errno'] = mysql_errno($this-&link_id);
$this-&ErrorMsg();
if (defined('DEBUG_MODE') && (DEBUG_MODE & 8) == 8)
$logfilename = $this-&root_path . DATA_DIR . '/mysql_query_' . $this-&dbhash . '_' . date('Y_m_d') . '.log';
$str = $sql . &\n\n&;
if (PHP_VERSION &= '5.0')
file_put_contents($logfilename, $str, FILE_APPEND);
$fp = @fopen($logfilename, 'ab+');
fwrite($fp, $str);
fclose($fp);
//echo $sql.&&br/&&br/&======================================&br/&&br/&&;
function affected_rows()
return mysql_affected_rows($this-&link_id);
function error()
return mysql_error($this-&link_id);
function errno()
return mysql_errno($this-&link_id);
function result($query, $row)
return @mysql_result($query, $row);
function num_rows($query)
return mysql_num_rows($query);
function num_fields($query)
return mysql_num_fields($query);
function free_result($query)
return mysql_free_result($query);
function insert_id()
return mysql_insert_id($this-&link_id);
function fetchRow($query)
return mysql_fetch_assoc($query);
function fetch_fields($query)
return mysql_fetch_field($query);
function version()
return $this-&
function ping()
if (PHP_VERSION &= '4.3')
return mysql_ping($this-&link_id);
function escape_string($unescaped_string)
if (PHP_VERSION &= '4.3')
return mysql_real_escape_string($unescaped_string);
return mysql_escape_string($unescaped_string);
function close()
return mysql_close($this-&link_id);
function ErrorMsg($message = '', $sql = '')
if ($message)
ajax_return(array('recode'=&&0009&,'msg'=&&MySQL server error info:&.$message,'data'=&''));
ajax_return(array('recode'=&&0010&,'msg'=&&MySQL server error report:&.$this-&error_message,'data'=&''));
/* 仿真 Adodb 函数 */
function selectLimit($sql, $num, $start = 0)
if ($start == 0)
$sql .= ' LIMIT ' . $
$sql .= ' LIMIT ' . $start . ', ' . $
return $this-&query($sql);
function getOne($sql, $limited = false)
if ($limited == true)
$sql = trim($sql . ' LIMIT 1');
$res = $this-&query($sql);
if ($res !== false)
$row = mysql_fetch_row($res);
if ($row !== false)
return $row[0];
return '';
function getOneCached($sql, $cached = 'FILEFIRST')
$cachefirst = ($cached == 'FILEFIRST' || ($cached == 'MYSQLFIRST' && $this-&platform != 'WINDOWS')) && $this-&max_cache_
if (!$cachefirst)
return $this-&getOne($sql, true);
$result = $this-&getSqlCacheData($sql, $cached);
if (empty($result['storecache']) == true)
return $result['data'];
$arr = $this-&getOne($sql, true);
if ($arr !== false && $cachefirst)
$this-&setSqlCacheData($result, $arr);
function getAll($sql)
$res = $this-&query($sql);
if ($res !== false)
$arr = array();
while ($row = mysql_fetch_assoc($res))
$arr[] = $
function getAllCached($sql, $cached = 'FILEFIRST')
$cachefirst = ($cached == 'FILEFIRST' || ($cached == 'MYSQLFIRST' && $this-&platform != 'WINDOWS')) && $this-&max_cache_
if (!$cachefirst)
return $this-&getAll($sql);
$result = $this-&getSqlCacheData($sql, $cached);
if (empty($result['storecache']) == true)
return $result['data'];
$arr = $this-&getAll($sql);
if ($arr !== false && $cachefirst)
$this-&setSqlCacheData($result, $arr);
function getRow($sql, $limited = false)
if ($limited == true)
$sql = trim($sql . ' LIMIT 1');
$res = $this-&query($sql);
if ($res !== false)
return mysql_fetch_assoc($res);
function getRowCached($sql, $cached = 'FILEFIRST')
$cachefirst = ($cached == 'FILEFIRST' || ($cached == 'MYSQLFIRST' && $this-&platform != 'WINDOWS')) && $this-&max_cache_
if (!$cachefirst)
return $this-&getRow($sql, true);
$result = $this-&getSqlCacheData($sql, $cached);
if (empty($result['storecache']) == true)
return $result['data'];
$arr = $this-&getRow($sql, true);
if ($arr !== false && $cachefirst)
$this-&setSqlCacheData($result, $arr);
function getCol($sql)
$res = $this-&query($sql);
if ($res !== false)
$arr = array();
while ($row = mysql_fetch_row($res))
$arr[] = $row[0];
function getColCached($sql, $cached = 'FILEFIRST')
$cachefirst = ($cached == 'FILEFIRST' || ($cached == 'MYSQLFIRST' && $this-&platform != 'WINDOWS')) && $this-&max_cache_
if (!$cachefirst)
return $this-&getCol($sql);
$result = $this-&getSqlCacheData($sql, $cached);
if (empty($result['storecache']) == true)
return $result['data'];
$arr = $this-&getCol($sql);
if ($arr !== false && $cachefirst)
$this-&setSqlCacheData($result, $arr);
function autoExecute($table, $field_values, $mode = 'INSERT', $where = '', $querymode = '')
$field_names = $this-&getCol('DESC ' . $table);
$sql = '';
if ($mode == 'INSERT')
$fields = $values = array();
foreach ($field_names AS $value)
if (@array_key_exists($value, $field_values) == true)
$fields[] = $
$field_values[$value] = stripslashes($field_values[$value]);
$values[] = &'& . addslashes($field_values[$value]) . &'&;
if (!empty($fields))
$sql = 'INSERT INTO ' . $table . ' (' . implode(', ', $fields) . ') VALUES (' . implode(', ', $values) . ')';
$sets = array();
foreach ($field_names AS $value)
if (array_key_exists($value, $field_values) == true)
$field_values[$value] = stripslashes($field_values[$value]);
$sets[] = $value . & = '& . addslashes($field_values[$value]) . &'&;
if (!empty($sets))
$sql = 'UPDATE ' . $table . ' SET ' . implode(', ', $sets) . ' WHERE ' . $
return $this-&query($sql, $querymode);
function autoReplace($table, $field_values, $update_values, $where = '', $querymode = '')
$field_descs = $this-&getAll('DESC ' . $table);
$primary_keys = array();
foreach ($field_descs AS $value)
$field_names[] = $value['Field'];
if ($value['Key'] == 'PRI')
$primary_keys[] = $value['Field'];
$fields = $values = array();
foreach ($field_names AS $value)
if (array_key_exists($value, $field_values) == true)
$fields[] = $
$values[] = &'& . $field_values[$value] . &'&;
$sets = array();
foreach ($update_values AS $key =& $value)
if (array_key_exists($key, $field_values) == true)
if (is_int($value) || is_float($value))
$sets[] = $key . ' = ' . $key . ' + ' . $
$sets[] = $key . & = '& . $value . &'&;
$sql = '';
if (empty($primary_keys))
if (!empty($fields))
$sql = 'INSERT INTO ' . $table . ' (' . implode(', ', $fields) . ') VALUES (' . implode(', ', $values) . ')';
if ($this-&version() &= '4.1')
if (!empty($fields))
$sql = 'INSERT INTO ' . $table . ' (' . implode(', ', $fields) . ') VALUES (' . implode(', ', $values) . ')';
if (!empty($sets))
'ON DUPLICATE KEY UPDATE ' . implode(', ', $sets);
if (empty($where))
$where = array();
foreach ($primary_keys AS $value)
if (is_numeric($value))
$where[] = $value . ' = ' . $field_values[$value];
$where[] = $value . & = '& . $field_values[$value] . &'&;
$where = implode(' AND ', $where);
if ($where && (!empty($sets) || !empty($fields)))
if (intval($this-&getOne(&SELECT COUNT(*) FROM $table WHERE $where&)) & 0)
if (!empty($sets))
$sql = 'UPDATE ' . $table . ' SET ' . implode(', ', $sets) . ' WHERE ' . $
if (!empty($fields))
$sql = 'REPLACE INTO ' . $table . ' (' . implode(', ', $fields) . ') VALUES (' . implode(', ', $values) . ')';
return $this-&query($sql, $querymode);
function setMaxCacheTime($second)
$this-&max_cache_time = $
function getMaxCacheTime()
return $this-&max_cache_
function getSqlCacheData($sql, $cached = '')
$sql = trim($sql);
$result = array();
$result['filename'] = $this-&root_path . $this-&cache_data_dir . 'sqlcache_' . abs(crc32($this-&dbhash . $sql)) . '_' . md5($this-&dbhash . $sql) . '.php';
$result['data'] = $GLOBALS['cache']-&get($result['filename']);
if($result['data']===false)
$result['storecache'] =
$result['storecache'] =
function setSqlCacheData($result, $data)
if ($result['storecache'] === true && $result['filename'])
$GLOBALS['cache']-&set($result['filename'],$data,$this-&max_cache_time);
/* 获取 SQL 语句中最后更新的表的时间,有多个表的情况下,返回最新的表的时间 */
function table_lastupdate($tables)
if ($this-&link_id === NULL)
$this-&connect($this-&settings['dbhost'], $this-&settings['dbuser'], $this-&settings['dbpw'], $this-&settings['dbname'], $this-&settings['charset'], $this-&settings['pconnect']);
$this-&settings = array();
$lastupdatetime = ' 00:00:00';
$tables = str_replace('`', '', $tables);
$this-&mysql_disable_cache_tables = str_replace('`', '', $this-&mysql_disable_cache_tables);
foreach ($tables AS $table)
if (in_array($table, $this-&mysql_disable_cache_tables) == true)
$lastupdatetime = ' 23:59:59';
if (strstr($table, '.') != NULL)
$tmp = explode('.', $table);
$sql = 'SHOW TABLE STATUS FROM `' . trim($tmp[0]) . &` LIKE '& . trim($tmp[1]) . &'&;
$sql = &SHOW TABLE STATUS LIKE '& . trim($table) . &'&;
$result = mysql_query($sql, $this-&link_id);
$row = mysql_fetch_assoc($result);
if ($row['Update_time'] & $lastupdatetime)
$lastupdatetime = $row['Update_time'];
$lastupdatetime = strtotime($lastupdatetime) - $this-&timezone + $this-&
function get_table_name($query_item)
$query_item = trim($query_item);
$table_names = array();
/* 判断语句中是不是含有 JOIN */
if (stristr($query_item, ' JOIN ') == '')
/* 解析一般的 SELECT FROM 语句 */
if (preg_match('/^SELECT.*?FROM\s*((?:`?\w+`?\s*\.\s*)?`?\w+`?(?:(?:\s*AS)?\s*`?\w+`?)?(?:\s*,\s*(?:`?\w+`?\s*\.\s*)?`?\w+`?(?:(?:\s*AS)?\s*`?\w+`?)?)*)/is', $query_item, $table_names))
$table_names = preg_replace('/((?:`?\w+`?\s*\.\s*)?`?\w+`?)[^,]*/', '\1', $table_names[1]);
return preg_split('/\s*,\s*/', $table_names);
/* 对含有 JOIN 的语句进行解析 */
if (preg_match('/^SELECT.*?FROM\s*((?:`?\w+`?\s*\.\s*)?`?\w+`?)(?:(?:\s*AS)?\s*`?\w+`?)?.*?JOIN.*$/is', $query_item, $table_names))
$other_table_names = array();
preg_match_all('/JOIN\s*((?:`?\w+`?\s*\.\s*)?`?\w+`?)\s*/i', $query_item, $other_table_names);
return array_merge(array($table_names[1]), $other_table_names[1]);
return $table_
/* 设置不允许进行缓存的表 */
function set_disable_cache_tables($tables)
if (!is_array($tables))
$tables = explode(',', $tables);
foreach ($tables AS $table)
$this-&mysql_disable_cache_tables[] = $
array_unique($this-&mysql_disable_cache_tables);
至此框架搭建完成,下面来写一个简单的例子
三.介绍简单的实例
controller控制层文件./app/controllers/user.php用户类
* @file: user.php 用户控制层
* @version: 1.0
* @author: Sara
* @create:
* @update:
* @access: http://blog.csdn.net/haiqiao_2010
* @copyright: 2012 http://blog.csdn.net/haiqiao_2010 All rights reserved.
header('Content-Type: text/ charset=utf-8');
@require_once './core/config/conn.php';
class user
* method __construct
* paramemter string $a
* return 提示信息/调用方法
function __construct()
(@$_REQUEST['act']);
if(empty($action)){
$action=&index&;
if(!in_array($action,array('index','login','register','userUpdatePwd'))){
ajax_return(array('recode'=&&0003&,'msg'=&&非法操作&,'data'=&$action));
* method index 非法调用
public function index()
ajax_return(array('recode'=&&0003&,'msg'=&&非法操作&,'data'=&@$_REQUEST['act']));
* method login 用户登陆(支持邮箱+密码或者账号+密码)
* param string $user_name,string $user_pwd,string $l_ip,string $city_name,float $l_xpoint,float $l_ypoint
* return 返回成功/失败已经登陆信息
public function login()
$data=json_decode(@$_REQUEST['req']);
$user_name_or_email = trim(new_htmlspecialchars(new_addslashes(@$data-&user_name)));
$user_pwd = trim(new_htmlspecialchars(new_addslashes(@$data-&user_pwd)));
$log['l_ip'] = trim(new_htmlspecialchars(new_addslashes(@$data-&l_ip)));
$log['city_name'] = trim(new_htmlspecialchars(new_addslashes(@$data-&city_name)));
$log['l_xpoint'] = trim(new_htmlspecialchars(new_addslashes(@$data-&l_xpoint)));
$log['l_ypoint'] = trim(new_htmlspecialchars(new_addslashes(@$data-&l_ypoint)));
$log['l_type'] = intval(@$data-&l_type);//用户登陆类型:默认为0,网站登陆,1为手机端IOS登陆,2为手机端android
$log['l_version'] = trim(new_htmlspecialchars(new_addslashes(@$data-&l_version)));
if(empty($user_name_or_email)|| empty($user_pwd))
$r=array('recode'=&&0002&,'msg'=&&参数错误&,'data'=&'');
$user_data = $GLOBALS['db']-&getRow(&select * from &.DB_PREFIX.&user where (user_name='&.$user_name_or_email.&' or email = '&.$user_name_or_email.&') and is_delete = 0&);
if(!$user_data)
$r=array('recode'=&&1014&,'msg'=&&该用户不存在,请确认操作.&,'data'=&'');
if($user_data['user_pwd'] != md5($user_pwd.$user_data['code'])&&$user_data['user_pwd']!=$user_pwd)
$r=array('recode'=&&0012&,'msg'=&&用户密码不对,请确认您的登陆信息.&,'data'=&'');
elseif($user_data['is_effect'] != 1)
$r=array('recode'=&&0011&,'msg'=&&账号未被激活,暂时不能进行如下操作.&,'data'=&'');
elseif($user_data['is_locking'] != 0)
$r=array('recode'=&&0014&,'msg'=&&账号已经被锁定,暂时不能进行如下操作.&,'data'=&'');
if(app_conf(&SHOP_TEL&)!='')
$r['msg'].=&若有疑问,请致电联系客服: &&.app_conf(&SHOP_TEL&).&&&;
//im:查看会员分组是否能够升级
$user_current_group = $GLOBALS['db']-&getRow(&select * from &.DB_PREFIX.&user_group where id = &.intval($user_data['group_id']));
$user_group = $GLOBALS['db']-&getRow(&select * from &.DB_PREFIX.&user_group where score &=&.intval($user_data['score']).& order by score desc&);
if($user_current_group['score']&$user_group['score'])
$user_data['group_id'] = intval($user_group['id']);
$GLOBALS['db']-&query(&update &.DB_PREFIX.&user set group_id = &.$user_data['group_id'].& where id = &.$user_data['id']);
$pm_title = &您已经成为&.$user_group['name'].&&;
$pm_content = &恭喜您,您已经成为&.$user_group['name'].&。&;
if($user_group['discount']&1)
$pm_content.=&您将享有&.($user_group['discount']*10).&折的购物优惠&;
send_user_msg($pm_title,$pm_content,0,$user_data['id'],get_gmtime(),0,true,true);
//im:查看会员积分是否能够升级
$user_current_level = $GLOBALS['db']-&getRow(&select * from &.DB_PREFIX.&user_level where id = &.intval($user_data['level_id']));
$user_level = $GLOBALS['db']-&getRow(&select * from &.DB_PREFIX.&user_level where point &=&.intval($user_data['point']).& order by point desc&);
if($user_current_level['point']&$user_level['point'])
$user_data['level_id'] = intval($user_level['id']);
$GLOBALS['db']-&query(&update &.DB_PREFIX.&user set level_id = &.$user_data['level_id'].& where id = &.$user_data['id']);
$pm_title = &您已经成为&.$user_level['name'].&&;
$pm_content = &恭喜您,您已经成为&.$user_level['name'].&。&;
send_user_msg($pm_title,$pm_content,0,$user_data['id'],get_gmtime(),0,true,true);
if($user_current_level['point']&$user_level['point'])
$user_data['level_id'] = intval($user_level['id']);
$GLOBALS['db']-&query(&update &.DB_PREFIX.&user set level_id = &.$user_data['level_id'].& where id = &.$user_data['id']);
$pm_title = &您已经降为&.$user_level['name'].&&;
$pm_content = &很报歉,您已经降为&.$user_level['name'].&。&;
send_user_msg($pm_title,$pm_content,0,$user_data['id'],get_gmtime(),0,true,true);
$log['l_time']=get_gmtime();
$log['user_id']=$user_data['id'];
//im:更新最后登陆信息
$GLOBALS['db']-&query(&update &.DB_PREFIX.&user set login_ip = '&.$log['l_ip'].&',login_time= &.$log['l_time'].&,group_id=&.intval($user_data['group_id']).& where id =&.$user_data['id']);
//添加登陆日志
$GLOBALS['db']-&autoExecute(&im_user_login_log&,$log);
//检查是否为最新系统版本
$log['l_type'] = intval(@$data-&l_type);//用户登陆类型:默认为0,网站登陆,1为手机端IOS登陆,2为手机端android
switch ($log['l_type'])//im_m_package:p_type:手机系统版本类型,默认为0 ios系统;为1 android系统
$package=$GLOBALS['db']-&getRow(&select p_version,p_url,is_must from im_m_package where is_effect=1 and p_type=0&);
$package=$GLOBALS['db']-&getRow(&select p_version,p_url,is_must from im_m_package where is_effect=1 and p_type=1&);
if (@$package && strnatcmp($log['l_version'],$package['p_version'])&0)
$varreg=&/^http:\/\/[A-Za-z0-9]+\.[A-Za-z0-9]+[\/=\?%\-&_~`@[\]\':+!]*([^&&\&\&])*$/&;
$varreg=&/^(http|https|ftp):\/\/([A-Z0-9][A-Z0-9_-]*(?:\.[A-Z0-9][A-Z0-9_-]*)+):?(\d+)?\/?/i&;
if(!preg_match($varreg,$package['p_url']))//im:判断是否为超链接
$package['p_url']=URL_PATH.str_replace(&./&,&&,$package['p_url']);
$r=array('recode'=&&0015&,'msg'=&&用户登陆成功.&,'data'=&array('user_id'=&$user_data['id'],'user_name'=&$user_data['user_name'],'true_name'=&$user_data['true_name'],'email'=&is_null($user_data['email'])?&&:$user_data['email'],'mobile'=&is_null($user_data['mobile'])?&&:$user_data['mobile'],'l_time'=&to_date($log['l_time']),'p_version'=&$package['p_version'],'p_url'=&$package['p_url'],'is_must'=&$package['is_must']));
$r=array('recode'=&&0015&,'msg'=&&用户登陆成功.&,'data'=&array('user_id'=&$user_data['id'],'user_name'=&$user_data['user_name'],'true_name'=&$user_data['true_name'],'email'=&is_null($user_data['email'])?&&:$user_data['email'],'mobile'=&is_null($user_data['mobile'])?&&:$user_data['mobile'],'l_time'=&to_date($log['l_time']),'p_version'=&$log['l_version'],'p_url'=&&&,'is_must'=&&&));
ajax_return($r);
* method register 用户注册
* param int $type,string $user_name,string $user_pwd,string $email ,string mobile
* return 返回成功/失败
public function register()
//{&type&:0,&user_name&:&sara123&,&user_pwd&:&123456&,&email&:&&,&mobile&:&&,&xpoint&:&119.306938&,&ypoint&:&26.069746&,&city_name&:&\u5b81\u590f&,&ip&:&192.168.1&,&l_type&:&1&,&l_version&:&1.0&,&verify_code&:&123456&,&msg_id&:&12&}
$data=json_encode(array(
&type&=&0,
&user_name&=&&sara123&,
&user_pwd&=&&123456&,
&email&=&&&,
&mobile&=&&&,
&xpoint&=&&119.306938&,
&ypoint&=&&26.069746&,
&city_name&=&&宁夏&,
&ip&=&&192.168.1&,
&l_type&=&&1&,
&l_version&=&&1.0&,
&verify_code&=&&123456&,
&msg_id&=&12
$data=json_decode(@$_REQUEST['req']);
$type = intval(@$data-&type);//im:注册方式:默认为0:邮箱+账号;1为:手机号+账号
$user_data['user_name'] = strtolower(trim(new_htmlspecialchars(new_addslashes(@$data-&user_name))));
$user_data[&user_pwd&] = trim(new_htmlspecialchars(new_addslashes(@$data-&user_pwd)));
$user_data[&email&] = trim(new_htmlspecialchars(new_addslashes(@$data-&email)));
$user_data[&mobile&] = trim(new_htmlspecialchars(new_addslashes(@$data-&mobile)));
$user_data[&xpoint&] = doubleval(@$data-&xpoint);
$user_data[&ypoint&] = doubleval(@$data-&ypoint);
$city_name = trim(new_htmlspecialchars(new_addslashes(@$data-&city_name)));
$user_data[&login_ip&] = trim(new_htmlspecialchars(new_addslashes(@$data-&ip)));
$l_type = intval(@$data-&l_type);//用户登陆类型:默认为0,网站登陆,1为手机端IOS登陆,2为手机端android
$l_version = trim(new_htmlspecialchars(new_addslashes(@$data-&l_version)));
if($user_data['user_name']==''|| !preg_match(&/^[a-z\d]{3,20}$/i&, $user_data['user_name']))
ajax_return(array('recode'=&&1001&,'msg'=&&用户名不能为空,且为3-20个由字母和数字组成的字符串.&.$data-&user_name,'data'=&&&));
if($GLOBALS['db']-&getOne(&select count(*) from &.DB_PREFIX.&user where user_name = '&.trim($user_data['user_name']).&'&)&0)
ajax_return(array('recode'=&&1006&,'msg'=&&该用户名已经存在,请重新填写&,'data'=&''));
$msg=get_pwd_strength($user_data['user_pwd']);
if(!empty($msg))
ajax_return(array('recode'=&&1003&,'msg'=&$msg,'data'=&''));
if($type==0)
if(!check_email($user_data['email']))
ajax_return(array('recode'=&&1003&,'msg'=&&邮箱格式不正确.&,'data'=&''));
if($GLOBALS['db']-&getOne(&select count(*) from &.DB_PREFIX.&user where email = '&.trim($user_data['email']).&'&)&0)
ajax_return(array('recode'=&&1004&,'msg'=&&该邮箱已经被注册过,请填写其他邮箱.&,'data'=&''));
if(!check_mobile($user_data['mobile']))
ajax_return(array('recode'=&&1005&,'msg'=&&手机号码格式错误,手机号码为11位.&,'data'=&''));
$verify_code = trim(new_htmlspecialchars(new_addslashes(@$data-&verify_code)));
$msg_id = intval(@$data-&msg_id);
if ($msg_id&=0 || empty($verify_code))
ajax_return(array('recode'=&&0002&,'msg'=&&参数错误&,'data'=&''));
$verify_result=use_sms_code(0,0,$msg_id,0,$user_data[&mobile&],$verify_code);
if($verify_result['status']==0)
ajax_return(array('recode'=&$verify_result['recode'],'msg'=&$verify_result['msg'],'data'=&''));
//验证结束开始插入数据
$user_data['create_time'] = get_gmtime();
$user_data['update_time'] = get_gmtime();
//获取默认会员组, 即升级积分最小的会员组
$user_data['group_id'] = $GLOBALS['db']-&getOne(&select id from &.DB_PREFIX.&user_group order by score asc limit 1&);
//获取用户所在城市id
$city = $GLOBALS['db']-&getRow(&select * from &.DB_PREFIX.&region_conf where name='&.$city_name.&'&);
if ($city)
switch ($city['region_level']) {//im:1:国 2:省 3:市(县) 4:区(镇)
$user_data['province_id']=$city['id'];
$user_data['city_id']=$city['id'];
$user_data['province_id'] = $city['pid'];
//账号是否激活
$user_data['is_effect'] = empty($user_data['is_effect'])? app_conf(&USER_VERIFY&):$user_data['is_effect'];
$user_data['is_effect']=1;//手机端注册,默认账号为激活状态
$user_data['code'] = ''; //默认不使用code, 该值用于其他系统导入时的初次认证
$user_data['user_pwd'] = md5($user_data['user_pwd'].$user_data['code']);
$user_data['register_type'] = 1;//register_type:im:用户注册的方式:默认为0,web端注册,1为手机端注册
if($GLOBALS['db']-&autoExecute(DB_PREFIX.&user&,$user_data,&INSERT&))
$user_id = $GLOBALS['db']-&insert_id();
$register_money = app_conf('USER_REGISTER_MONEY');
$register_score = app_conf('USER_REGISTER_SCORE');
$register_point = app_conf('USER_REGISTER_POINT');
if($register_money&0||$register_score&0)
$user_get['score'] = $register_
$user_get['money'] = $register_
$user_get['point'] = $register_
@require_once './app/modules/userModule.php';
modify_account($user_get,intval($user_id),&在&.to_date(get_gmtime()).&注册成功&);
//im:添加登陆日志
$GLOBALS['db']-&autoExecute(&im_user_login_log&,array('user_id'=&$user_id,'l_type'=&1,'l_ip'=&$user_data['login_ip'],'l_time'=&get_gmtime(),&city_name&=&$city_name,&l_xpoint&=&$user_data['xpoint'],&l_ypoint&=&$user_data['ypoint'],&l_type&=&$l_type,&l_version&=&$l_version));
ajax_return(array('recode'=&&1009&,'msg'=&&用户注册成功&,'data'=&array('user_id'=&$user_id,&user_name&=&$user_data['user_name'],&email&=&is_null($user_data['email'])?&&:$user_data['email'],&mobile&=&is_null($user_data['mobile'])?&&:$user_data['mobile'],&create_time&=&to_date($user_data['create_time']))));
ajax_return(array('recode'=&&1008&,'msg'=&&用户注册失败&,'data'=&''));
* method userUpdatePwd 修改密码接口
* parameter int $user_id
* parameter string $old_pwd
* parameter string $new_pwd
* return 返回成功/失败
function userUpdatePwd()
//{&user_id&:0,&old_pwd&:&&,&new_pwd&:&&}
$data=json_encode(array(
&user_id&=&0,
&old_pwd&=&&&,
&new_pwd&=&&&
$data=json_decode(@$_REQUEST['req']);
$user_id = intval(@$data-&user_id);
$user_pwd = trim(new_htmlspecialchars(new_addslashes(@$data-&old_pwd)));
$new_pwd = trim(new_htmlspecialchars(new_addslashes(@$data-&new_pwd)));
if ($user_id&=0)
$r=array('recode'=&&0002&,'msg'=&&参数错误.&,'data'=&'');
$msg=get_pwd_strength($new_pwd);
if(!empty($msg))
$r=array('recode'=&&1002&,'msg'=&$msg,'data'=&'');
ajax_return($r);
$user_data = $GLOBALS['db']-&getRow(&select * from &.DB_PREFIX.&user where id='&.$user_id.&'&);
if(!$user_data)
$r=array('recode'=&&1014&,'msg'=&&该用户不存在,请确认操作.&,'data'=&'');
if($user_data['user_pwd'] != md5($user_pwd.$user_data['code'])&&$user_data['user_pwd']!=$user_pwd)
$r=array('recode'=&&0012&,'msg'=&&用户密码不对,请确认您的登陆信息.&,'data'=&'');
elseif($user_data['is_effect'] != 1)
$r=array('recode'=&&0011&,'msg'=&&账号未被激活,暂时不能进行如下操作.&,'data'=&'');
else if ($user_data['is_delete']==1)
$r=array('recode'=&&1012&,'msg'=&&该用户已被删除,请重新注册.&,'data'=&'');
$user_data['user_pwd'] = $new_
$new_pwd = md5($new_pwd.$user_data['code']);
if($GLOBALS['db']-&query(&update &.DB_PREFIX.&user set user_pwd = '&.$new_pwd.&',password_verify='' where id = &.$user_data['id'] ))
$GLOBALS['db']-&query(&update &.DB_PREFIX.&supplier_account set account_password = '&.$new_pwd.&' where user_id = &.$user_data['id'] );
$r=array('recode'=&&0000&,'msg'=&&操作成功.&,'data'=&'');
$r=array('recode'=&&0001&,'msg'=&&操作失败.&,'data'=&'');
ajax_return($r);
12345678910
12345678910
12345678910 上一篇:下一篇:文章评论相关解决方案 12345678910 Copyright & &&版权所有}

我要回帖

更多关于 php checkdate 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信