XCache 工程由 mOo 领队, 他也是 Lighttpd 的开发成员之一. Lighttpd 是最快的 Web 服务器应用程序之一, 并且超越 Apache 以及许多其他 Web 服务器. XCache 努力达到类似的效果.目前最新的版本为XCache 3.2.0,它是php5全系列支持的,官方网站: http://xcache.lighttpd.net/如果英文不好的朋友,可以点右边切换语言为中文。首先下载最新的版本: http://xcache.lighttpd.net/pub/Releases/3.2.0/ 记得选择正确的版本。下载解压后放到php下的ext目录下,然后打开php.ini 添加extension = php_xcache.dll压缩包内还有一个中文版Xcache的php.ini的示范,还有就是一个查看Xcache及信息的程序.注意xcache.admin.pass 用md5加密后存放xcache.count可以根据你CPU的数设置,默认为1xcache.slots缓存的文件/变量hash参考值,根据自己的实际情况可以设置完成后,重新启动Apache服务。复制代码 代码如下:;; 本文件只是例子, 请在 php.ini 里设置以便生效 [xcache-common] ;; 非 windows 例子: extension = xcache.so ;; Windows 系统例子: ; extension = php_xcache.dll [xcache.admin] xcache.admin.enable_auth = On xcache.admin.user = "mOo"; xcache.admin.pass = md5($您的密码) ; 登录使用 $your_password下面的密码请用md5加密后填写到里面 xcache.admin.pass = ""[xcache] ; 这里的多数选项仅在 ini 里可以修改, 这里列出的都是默认值, 除非另外说明 ; 选择底层内存共享实现方案 xcache.shm_scheme =        "mmap"; 禁用: xcache.size=0 ; 启用: xcache.size=64M 之类 (任意>0的值) 同时请注意您的系统 mmap 上限 xcache.size  =               60M ; 建议设置为 cpu 数 (cat /proc/cpuinfo |grep -c processor) xcache.count =                 1 ; 只是个 hash 参考值, 实际存储项目(php脚本/变量)可超过这个数字 xcache.slots =                8K ; 缓存项目的 ttl, 0=永久 xcache.ttl   =                 0 ; 扫描过期项目的时间间隔, 0=不扫描, 其他值以秒为单位 xcache.gc_interval =           0 ; 同上, 只是针对变量缓存设置 xcache.var_size  =            4M xcache.var_count =             1 xcache.var_slots =            8K ; xcache_*() 函数 ttl 参数的默认值 xcache.var_ttl   =             0 ; 限制 xcache_*() 函数 ttl 参数不超过此设置. 0=不限制 xcache.var_maxttl   =          0 xcache.var_gc_interval =     300 ; /dev/zero 时无效 xcache.readonly_protection = Off ; 对于 *nix 系统, xcache.mmap_path 是文件路径而不是目录. (自动创建/覆盖) ; 如果您期望启用 ReadonlyProtection, 必须避免使用 "/dev/*", 可以使用类似 "/tmp/xcache"; 不同 php 进程组不会共享同一个 /tmp/xcache ; 对于 Win32 系统, xcache.mmap_path=匿名MAP名字, 不是文件路径. 建议使用 XCache 字眼避免跟其他软件冲突 xcache.mmap_path =    "/dev/zero"  ; 仅在 XCache 异常时有用. 设置为空(禁用) 或者类似 "/tmp/phpcore/" (能被 php 写入文件) xcache.coredump_directory =   ""; 仅用于 Windows. 除非 XCache 开发人员告诉你, 否则保持默认值 xcache.coredump_type =         0 ; 异常时自动禁止缓存 xcache.disable_on_crash =    Off ; 启用实验性功能 (如果有) xcache.experimental =        Off ; 以下是 Request 级可改设置. 可以 ini_set, .htaccess 等 xcache.cacher =               On xcache.stat   =               On xcache.optimizer =           Off [xcache.coverager] ; 本功能开启后降低运行性能 ; 仅在 xcache.coverager == On && xcache.coveragedump_directory == "非空值" 时本功能才会启用 ; per request settings. 可以 ini_set, .htaccess 等 ; 启用代码流程覆盖面信息采集以及 xcache_coverager_start/stop/get/clean() 等函数 xcache.coverager =           Off xcache.coverager_autostart =  On ; 仅在 php ini 文件内设置 ; 请确保本目录能被 coverage viewer 脚本读取 (注意 open_basedir) xcache.coveragedump_directory = "" 然后查看phpinfo,看看Xcache是否已经生效。如下图现在在web发布目录中新建一个目录如xcache,将官方的压缩包内的lib及htdocs目录放里面,在浏览器输入http://127.0.0.1/xcache/htdocs/, 会弹出一个登陆的账号密码对话框,输入进去后,你就可以看到xcache的环境及配置,变量等等。。但实际上Xcache不但能缓存变量,而且能缓存php文件,如果你的php环境中配置了Xcache扩展后,它会自动将每次给你访问的php文件都自动缓存。无需再额外的修改代码,十分的方便快捷,如下图的我只访问了phpmyadmin,Xcache官方的程序包就可以检测到phpmyadmin的cache列表。代码很简单,带单例模式,可以直接在应用环境中使用,代码在php5.5.12中完美测试通过。复制代码 代码如下: $c =new Cache_Xcache();     $c->set('key', 'aaaa123');     echo $c->get('key');     Cache_Xcache::getInstance()->set('key1', '999999999999999');     echo Cache_Xcache::getInstance()->get('key1');  /**------------------------------代码开始----------------------------------**/  class Cache_Xcache {     /**      * 单例模式实例化本类      *      * @var object      */    protected static $_instance = null;     /**      * 默认的缓存策略      *      * @var array      */    protected $_defaultOptions = array('expire' => 900);     /**      * 构造方法      *      * @access public      * @return boolean      */    public function __construct() {         //分析xcache扩展模块         if (!extension_loaded('xcache')) {             die('The xcache extension to be loaded before use!');         }         return true;     }     /**      * 写入缓存      *      * @access public      *      * @param string $key 缓存key      * @param mixted $value 缓存值      * @param integer $expire 生存周期      *      * @return boolean      */     public function set($key, $value, $expire = null) {         //参数分析         if (!$key) {             return false;         }         $expire = is_null($expire) ? $this->_defaultOptions['expire'] : $expire;         return xcache_set($key, $value, $expire);      }     /**      * 读取缓存,失败或缓存撒失效时返回 false      *      * @access public      *      * @param string $key 缓存key      *      * @return mixted      */     public function get($key) {         //参数分析         if (!$key) {             return false;         }         return xcache_isset($key) ? xcache_get($key) : false;      }     /**      * 缓存一个变量到数据存储      *      * @access public      *      * @param string $key 数据key      * @param mixed $value 数据值      * @param int $expire 缓存时间(秒)      *      * @return boolean      */    public function add($key, $value, $expire = null) {         //参数分析         if (!$key) {             return false;         }         $expire = is_null($expire) ? $this->_defaultOptions['expire'] : $expire;         return !xcache_isset($key) ? $this->set($key,$value,$expire) : false;     }     /**      * 删除指定的缓存      *      * @access public      *      * @param string $key 缓存Key      *      * @return boolean      */     public function delete($key) {          //参数分析         if (!$key) {             return false;         }         return xcache_unset($key);      }     /**      * 清空全部缓存变量      *      * @access public      * @return boolean      */    public function clear() {         return xcache_clear_cache(XC_TYPE_VAR, 0);     }     /**      * 单例模式      *      * 用于本类的单例模式(singleton)实例化      *      * @access public      * @return object      */    public static function getInstance() {         if (!self::$_instance) {             self::$_instance = new self();         }         return self::

一、意图定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。Template Method 使得子类可以在不改变一个算法的结构的情况下重定义该算法的某些特定的步骤【GOF95】二、模板方法模式结构图三、模板方法模式中主要角色抽象模板(AbstractClass)角色: 定义一个或多个抽象方法让子类实现。这些抽象方法叫做基本操作,它们是顶级逻辑的组成部分。定义一个模板方法。这个模板方法一般是一个具体方法,它给出顶级逻辑的骨架,而逻辑的组成步骤在对应的抽象操作中,这些操作将会推迟到子类中实现。同时,顶层逻辑也可以调用具体的实现方法具体模板(ConcrteClass)角色:实现父类的一个或多个抽象方法,作为顶层逻辑的组成而存在。每个抽象模板可以有多个具体模板与之对应,而每个具体模板有其自己对抽象方法(也就是顶层逻辑的组成部分)的实现,从而使得顶层逻辑的实现各不相同。四、模板方法模式适用场景1、一次性实现一个算法的不变的部分,并将可变的行为留给子类来实现。2、各子类中公共的行为应被提取出来并集中到一个公共父类中以避免代码重复。3、控制子类扩展。五、模板方法模式与其它模式1、策略模式(strategy模式):模板方法使用继承来改变算法的部分,策略模式使用委托来改变整个算法。区别在于封闭的变化不同,一个变化的部分,一个变化的是整体。2、工厂方法模式(factory method模式):Factory Method模式常被模板方法调用。六、模板方法模式PHP示例<?php/** * 抽象模板角色 * 定义抽象方法作为顶层逻辑的组成部分,由子类实现 * 定义模板方法作为顶层逻辑的架子,调用基本方法组装顶层逻辑 */abstract class AbstractClass { /** * 模板方法 调用基本方法组装顶层逻辑 */ public function templateMethod() { echo 'templateMethod begin.<br />'; $this->primitiveOperation1(); $this->primitiveOperation2(); echo 'templateMethod end.<br />'; } /** * 基本方法1 */ abstract protected function primitiveOperation1(); /** * 基本方法2 */ abstract protected function primitiveOperation2();} /** * 具体模板角色 * 实现父类的抽象方法 */class ConcreteClass extends AbstractClass{ /** * 基本方法1 */ protected function primitiveOperation1() { echo 'primitiveOperation1<br />'; } /** * 基本方法2 */ protected function primitiveOperation2(){ echo 'primitiveOperation2<br />'; } } /** * 客户端 */class Client { /** * Main program. */ public static function main() { $class = new ConcreteClass(); $class->templateMethod(); }} Client::main();?>七、模板方法模式模板方法是一种代码复用的基本技术,模板方法导致一种反射的控制结构,这指的是一个父类调用子类的操作。其实现过程:准备一个抽象类,将部分逻辑以具体方法以及具体构造子的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。八、重构的原则重构时应当遵守的原则是:将行为以是移到结构的高端,而将状态尽量移动到结构的低端。1、应当要所行为而不是状态定义一个类。2、在实现行为是,是用抽象状态而不是用具体状态。3、给操作划分层次。4、将状态的确认推迟到子类中。在父类中,如果需要状态属性的话,可以调用抽象的取值方法,而将抽象的取值方法的实现放到具体子类中。如果可以遵守以上的而,那么就可以在等级结构中将接口与实现分离,将抽象与具体分离,从而保证代码可以最大限度的被复用。以上就是使用php实现模板方法模式的代码,还有一些关于模板方法模式的概念区分,希望对大家的学习有所帮助。

本文实例讲述了php+mysql数据库查询的方法。分享给大家供大家参考。具体实现方法如下:复制代码 代码如下:<?php      //连接数据库的参数      $host = "localhost";      $user = "root";      $pass = "zq19890319";      $db = "phpdev";      //创建一个mysql连接      $connection = mysql_connect($host, $user, $pass) or die("Unable to connect!");      //选择一个数据库      mysql_select_db($db) or die("Unable to select database!");      //开始查询      $query = "SELECT * FROM symbols";      //执行SQL语句      $result = mysql_query($query) or die("Error in query: $query. ".mysql_error());      //显示返回的记录集行数      if(mysql_num_rows($result)>0){          //如果返回的数据集行数大于0,则开始以表格的形式显示          echo "<table cellpadding=10 border=1>";          while($row=mysql_fetch_row($result)){              echo "<tr>";              echo "<td>".$row[0]."</td>";              echo "<td>".$row[1]."</td>";              echo "<td>".$row[2]."</td>";              echo "</tr>";          }          echo "</table>";      }      else{          echo "记录未找到!";      }      //释放记录集所占用的内存      mysql_free_result($result);      //关闭该数据库连接      mysql_close($connection);  ?>上述代码分析如下:1.建立到数据库服务器的一个连接。这个信息包括服务器地址、MySQL用户名、密码、选择的数据库名,这些变量保存在PHP的变量中。2.一旦和MySQL数据库服务器建立通信,就需要数据库服务器打开一个连接。PHP与数据库的所有通信都经过这个连接,为了初始化这个连接,PHP提供了mysql_connect()函数。这个函数包括三个参数,都是必填项,分别是数据库服务器名称、用户名及密码。如果数据库服务器和Web服务器都运行在同一台机器上,则可以使用localhost作为服务器名称。mysql_connect()返回一个“连接标识符”,这个连接标识符保存在变量$connection中。这个标识符用来与数据库通信。3.当使用$connection连接到数据库后,需要用mysql_select_db()函数选择一个数据库。4.建立一个查询并执行,我们使用mysql_query()函数实现这个功能。5.如果mysql_query($query)执行成功,返回的结果记录集将存放在$result变量中。这个结果集可能包含一个或多个数据行或列的数据,这取决于我们所使用的查询命令。根据返回结果的不同,我们可以使用mysql_fetch_row()函数来处理,将结果数据转为单列数组,该单列数组保存在$row的数组中。可以连续使用标准PHP的数组符号访问这个数组中的字段值。每次调用mysql_fetch_row()函数时,都会返回结果集的下一条记录,这个特性使得mysql_fetch_row()非常适合于while和for循环。6.由于每一个查询后返回的结果集都占用内存,我们使用mysql_free_result()函数来释放内存。结果集释放后,如果没有其他查询操作,就可以使用mysql_close()函数关闭和MySQL服务器的连接了。希望本文所述对大家的php程序设计有所帮助。

效果1. 当鼠标放在某日上时,如果当天有备忘录,则会显示出来,如下图: 复制代码 代码如下: function checkfortasks (thedate, e){ //找到页面中taskbox对应<div>设置为可见 theObject = document.getElementById("taskbox"); theObject.style.visibility = "visible"; //初始化taskbox位置 var posx = 0; var posy = 0; //定位taskbox位置为鼠标位置 posx = e.clientX + document.body.scrollLeft; posy = e.clientY + document.body.scrollTop; theObject.style.left = posx + "px"; theObject.style.top = posy + "px"; //设置PHP请求页面 serverPage = "taskchecker.php?thedate=" + thedate; //设置PHP返回数据替换位置 objID = "taskbox"; var obj = document.getElementById(objID); //发送请求并加载返回数据 xmlhttp.open("GET", serverPage); xmlhttp.onreadystatechange = function(){ if (xmlhttp.readyState == 4 && xmlhttp.status == 200){ obj.innerHTML = xmlhttp.responseText; } } xmlhttp.send(null); } 效果2. 当鼠标点击某日录入姓名时,系统会自动检索姓名是否存在,并可以通过选择填入姓名框中,如图: 复制代码 代码如下: function autocomplete (thevalue, e){ //定位页面中autocompletediv(显示检索姓名的标签)的<div>位置 theObject = document.getElementById("autocompletediv"); //设置为可见 theObject.style.visibility = "visible"; theObject.style.width = "152px"; //设置检索标签位置 var posx = 0; var posy = 0; posx = (findPosX (document.getElementById("yourname")) + 1); posy = (findPosY (document.getElementById("yourname")) + 23); theObject.style.left = posx + "px"; theObject.style.top = posy + "px"; //设定事件为键盘录入 var theextrachar = e.which; if (theextrachar == undefined){ theextrachar = e.keyCode; } //设定加载检索名单位置 var objID = "autocompletediv"; //设定PHP请求页面,并将用户输入的姓名传值过去(同时考虑到Backspace作用) if (theextrachar == 8){ if (thevalue.length == 1){     var serverPage = "autocomp.php"; } else{     var serverPage = "autocomp.php" + "?sstring=" + thevalue.substr(0, (thevalue.length -1)); } } else{ var serverPage = "autocomp.php" + "?sstring=" + thevalue + String.fromCharCode(theextrachar); } //发送请求并加载返回数据 var obj = document.getElementById(objID); xmlhttp.open("GET",

mysql_real_escape_string() 所以得SQL语句如果有类似这样的写法:"select * from cdr where src =".$userId; 都要改成 $userId=mysql_real_escape_string($userId) 所有有打印的语句如echo,print等 在打印前都要使用htmlentities() 进行过滤,这样可以防止Xss,注意中文要写出htmlentities($name,ENT_NOQUOTES,GB2312) 。

分类:腾博会官方网

时间:2016-04-19 04:22:18