从此不求人:自主研发一套PHP前端开发框架(21)
来源:互联网 发布:红色摇滚知乎 编辑:程序博客网 时间:2024/06/02 03:11
Memcache 简述
1.第三方的缓存,PHP、java、c#等主流语言都可以无障碍使用。
2.支持分布式部署(也就是可以多台服务器分担压力,提高性能)
3.数据放在内存中,比我们自己写的代码更加优秀德管理内存中的数据。
应用场景
1.交互式网站(非门户网站)
2.电商网站
3.部分BS后台应用(提高内存利用率)
PHP使用缓存的步骤
1.下载对应版本的memcache服务端
2.下载拓展库
如果是使用Linux可以上官网http://memcached.org有详细教程
3.
windows下仅供开发使用,不适合在正式环境中使用
编写一些代码
首先安装相应的拓展php_memcache.dll(本课时使用)
注意:细心的同学可能会发现 还有一个拓展叫做php_memcached.dll
两者不一样,在系统相对较复杂、压力大的情况下,推荐使用
后者性能更高、功能更强、稳定性更好
memcahe 拓展 http://cn2.php.net/memcache
memcahed 拓展 http://www.php.net/manual/zh/book.memcached.php
the_cache($key)set_cache($key,$value,$expire);//超期时间,单位秒Memcache事例代码$m = new Memchache();$m->connect('127.0.0.1',11211);//11211是默认端口号码
_Master.inc 代码如下
<?php //所有controller的父类 抽象类 abstract class _Master{ var $_view='index';//模板名称 var $_vars = array(); var $_cachetime=0;//缓存时间 function setView($viewName){ $this->_view = $viewName; } function getView(){ return LKPHP_PATH.'/MVC/View/'.LKPHP_VIEWPATH.'/'.$this->_view.'.'.LKPHP_EXTENSION; } function setVar($varName,$varValue){ //设置变量 $this->_vars[$varName] = $varValue; } function hasVarCache(){ if(the_cache($this->_view)){ return true; } return false; } function run(){ //解包变量 if($this->_cachetime > 0){ $getVars_cache = the_cache($this->_view); if($getVars_cache){ echo '<b>这是从memcache中获取的数据</b><br/>'; extract($getVars_cache); }else{ //同时要设置缓存 set_cache($this->_view,$this->_vars,0,$this->_cachetime); extract($this->_vars); } }else{ extract($this->_vars); } extract($this->_vars); //加载头部模板 include(LKPHP_PATH.'/MVC/View/'.LKPHP_VIEWPATH.'/'.LKPHP_VIEWHEADER.'.'.LKPHP_EXTENSION); include($this->getView());//加载模板body include(LKPHP_PATH.'/MVC/View/'.LKPHP_VIEWPATH.'/'.LKPHP_VIEWFOOTER.'.'.LKPHP_EXTENSION);//尾部 } //魔术方法 function __get($p){ $c=load_class($p); return $c; } } ?>
functions.inc
<?php function load_db(){ $db_path=LKPHP_PATH.'/Libary/DataBase/myDataBase.php'; if(!class_exists('myDataBase')){ require($db_path); } return new MyDataBase(); } function load_model($modelName){ $_Model_Path = LKPHP_PATH.'/MVC/Model/_Model.inc';//基类Model if(!class_exists('_Model')){ require($_Model_Path); } $_mdPath = LKPHP_PATH.'/MVC/Model/'.$modelName.'.inc';//基类Model if(!class_exists($modelName)){ require($_mdPath); } return new $modelName(); } //加载虚拟类 function load_class($class){ $classPath = LKPHP_PATH.'/Libary/Class/myClass.php'; if(!class_exists('myClass')){ require($classPath); } return new myClass($class); }// the_XXX系列/* * 获取get参数 * 当$ispost是true是代表获取post参数 默认是false */function the_get($get_key,$ispost=false) { $parameters=$ispost?$_POST:$_GET; if(!isset($parameters[$get_key])) return ""; $str=$parameters[$get_key]; //过滤危险字符、敏感字符通用函数 //第一步:通过正则过滤掉我需要过滤的标记 $farr = array( "/<(\/?)(script|i?frame|style|html|body|title|link|meta|\?|\%)([^>]*?)>/isU"); //过滤类似 <script> <style> <object> <meta 等 $str = preg_replace($farr,"",$str); $str=addslashes($str); //对单引号、双引号等预定义字符 前面加上反斜杠 如'变成\' //第二步 过滤敏感词汇 $str=str_replace(explode(",", LKPHP_UNSAFEWORDS),"***",$str); return trim($str); } /* * 获取当前用户的IP地址,无参数 */ function the_ip() { if (getenv("HTTP_CLIENT_IP") && strcasecmp(getenv("HTTP_CLIENT_IP"), "unknown")) $ip = getenv("HTTP_CLIENT_IP"); else if (getenv("HTTP_X_FORWARDED_FOR") && strcasecmp(getenv("HTTP_X_FORWARDED_FOR"), "unknown")) $ip = getenv("HTTP_X_FORWARDED_FOR"); else if (getenv("REMOTE_ADDR") && strcasecmp(getenv("REMOTE_ADDR"), "unknown")) $ip = getenv("REMOTE_ADDR"); else if (isset ($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], "unknown")) $ip = $_SERVER['REMOTE_ADDR']; else $ip = "unknown"; return ($ip); } /* * 获取当前登录用户 * 返回值是个model 如果用户没有登录则返回false */ function the_user() { //可以使用cookie 也可以使用session $md = json_decode(myDecrypt($_COOKIE[LKPHP_USERCOOKIE],LKPHP_DESKEY)); return isset($_COOKIE[LKPHP_USERCOOKIE])?$md :false; } //根据cacheKey或来获得缓存内容function the_cache($cacheKey){ //这里我们使用memcached $m = new Memcache(); $m->connect(LKPHP_MEMCACHE_IP,LKPHP_MEMCACHE_PORT); return $m->get($cacheKey);}?><?php //is_XX系列 如判断用户是否登录 字符串格式 /* * 判断用户是否登录 */ function is_login() { //用户是否登录 if(the_user()) return true; return false; } //判断字符串是否符合email格式 function is_email($email) { return ereg("/^[a-z]([a-z0-9]*[-_\.]?[a-z0-9]+)*@([a-z0-9]*[-_]?[a-z0-9]+)+[\.][a-z]{2,3}([\.][a-z]{2})?$/i",$email); }?><?php //set_XX系列,譬如更新缓存或者更新一个model //更新缓存 function set_cache($cacheKey,$value,$expire) { $m = new Memcache(); $m->connect(LKPHP_MEMCACHE_IP,LKPHP_MEMCACHE_PORT); return $m->set($cacheKey,$value,0,$expire); } //更新一个model function set_model($model) { } //设置当前登录用户 function set_user($md,$time){ if($time<0){ //代表注销 setcookie(LKPHP_USERCOOKIE,'',time()-3600,'/'); }else{ //代表登录成功 $md = myCrypt(json_encode($md),LKPHP_DESKEY); setcookie(LKPHP_USERCOOKIE,$md,time()+$time,'/');//对对象进行json编码 } } function pkcs5_pad ($text, $blocksize) { //加密时的字节填充,保持和java 一致 $pad = $blocksize - (strlen($text) % $blocksize); return $text . str_repeat(chr($pad), $pad); } function myCrypt($input,$key) //加密 { $size = mcrypt_get_block_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_ECB); $input =pkcs5_pad($input, $size); $td = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_ECB, ''); $iv = mcrypt_create_iv (mcrypt_enc_get_iv_size($td), MCRYPT_RAND); mcrypt_generic_init($td, $key, $iv); $data = mcrypt_generic($td, $input); mcrypt_generic_deinit($td); mcrypt_module_close($td); $data = base64_encode($data); return $data; } function myDecrypt($str,$key) //解密 { $decrypted= mcrypt_decrypt( MCRYPT_RIJNDAEL_128, $key, base64_decode($str), MCRYPT_MODE_ECB ); $dec_s = strlen($decrypted); $padding = ord($decrypted[$dec_s-1]); $decrypted = substr($decrypted, 0, -$padding); return $decrypted; }?>
0 0
- 从此不求人:自主研发一套PHP前端开发框架
- 从此不求人:自主研发一套PHP前端开发框架(21)
- 从此不求人:自主研发一套PHP前端开发框架(31)搭建后台框架
- 从此不求人:自主研发一套PHP前端开发框架 (1)
- 从此不求人:自主研发一套PHP前端开发框架(2)
- 从此不求人:自主研发一套PHP前端开发框架(3)
- 从此不求人:自主研发一套PHP前端开发框架(4)
- 从此不求人:自主研发一套PHP前端开发框架(6)
- 从此不求人:自主研发一套PHP前端开发框架(7)
- 从此不求人:自主研发一套PHP前端开发框架(8)
- 从此不求人:自主研发一套PHP前端开发框架(9)
- 从此不求人:自主研发一套PHP前端开发框架(10)
- 从此不求人:自主研发一套PHP前端开发框架(11)
- 从此不求人:自主研发一套PHP前端开发框架(12)
- 从此不求人:自主研发一套PHP前端开发框架(12)
- 从此不求人:自主研发一套PHP前端开发框架(13)
- 从此不求人:自主研发一套PHP前端开发框架(14)
- 从此不求人:自主研发一套PHP前端开发框架(15)
- Android 第三方QQ、微信、微博登录分享
- gpio模拟I2C,驱动pcf8574T
- C++之实现MyString类
- Java 阻塞
- Tcl -- info
- 从此不求人:自主研发一套PHP前端开发框架(21)
- NSDate YYYY-MM-dd hh:mm:ss
- Gson源码
- Android Studio 运行出现 Multiple dex files define Landroid/support/annotation/AnimRes;解决方法
- 过大的数组该怎么存储
- IOS常用数据结构
- UESTC 1134 男神的约会 状压DP
- 关于JAVA和oracle的日期格式化
- virtualbox中NAT方式通过宿主机访问虚拟机端口映射配置