Category: Php / Pear / Mysql / Node.js

PHP:如何实现Hook机制, php钩子函数, php钩子实现

所谓Hook机制,是从Windows编程中流行开的一种技术。其主要思想是提前在可能增加功能的地方埋好(预设)一个钩子,这个钩子并没有实际的意义,当我们需要重新修改或者增加这个地方的逻辑的时候,把扩展的类或者方法挂载到这个点即可。 笔者在学习钩子机制时,参考的是TP3.2.3的tag和Hook机制,使用的是自己开发的MVC框架,其目录风格等均模仿TP3.2.3,让大佬们见笑了。 举个简单的例子,我们现在要写一个用户注册的功能,如下图: /App/Home/Controller/IndexController.class.php 突然有一天,客户说我需要增加一个功能,新用户注册奖励50积分,那我只好这样写: 客户看了很满意,但是你的另一个同事需要你的代码,你跟他说自己从git上pull。客户又提出一个要求,要在用户注册后给用户发一个邮件(忍住(╬▔皿▔)),那你会这样做: 如果在一个项目中,有大量的类似修改,你该怎么办?就那么修改?项目只会越来越臃肿,越发的杂乱不堪。捅死客户?别闹了,犯法的ㄟ( ▔, ▔ )ㄏ。辞职?想想房贷,再想想妻儿老小,我忍(。・`ω´・)。ps:程序员哪来的妻儿…( ̄∀ ̄) 言归正传,最好解决办法就是使用钩子机制。 首先来看一下我们写的Hook类: /CutePHP/Lib/Cute/Hook.class.php 这是我仿照TP的Hook写的一个简单的Hook类,该类中包含了一个静态的私有属性Hooks用于记录所有已经注册的钩子 add方法传入钩子的名称和方法,即可将这个钩子存入数组中,listen则是用于监听某个钩子,只要有这个钩子将调用exec方法执行这个钩子 我们来测试一下,首先在/App/Home/Controller.class.php中埋入钩子: 然后在/App/Home/Plugin目录下面建立和钩子一样的文件夹 /App/Home/Plugin/register 下面建立和钩子名一样的文件register.php,写一个简单的类,名称也叫register,下面有个两个方法,一个叫before一个叫after: 然后在项目的公共配置中注册两个钩子:… Read More

Memcached数据库管理, 基于Web的Memcached管理工具:phpMemAdmin

phpMemAdmin是一个采用PHP开发,能够能在Web中展示和修改存储在Memcached中数据的工具。 特性 提供详细的统计数据,图表和图形 Memcached数据管理(支持CRUD操作) Memcachedcluster 健康仪表盘 Memcachedhost 仪表盘 更新检查 漂亮和舒服的UI 简洁和良好的文档代码 响应式和移动设备支持 截图 Cluster Dashboard Host Dashboard Data Management  … Read More

php-webdriver:PHP控制浏览器动作, php web驱动, PHP实现自动化, php webdriver 教程, A php client for webdriver.

  项目地址:https://github.com/facebook/php-webdriver   一、技术选型   php + facebook/webdriver + selenium Selenium是一套完整的Web应用程序测试系统,它提供了一系列的操作浏览器的 API webdriver 是 facebook 开发的一套 selenium API 的客户端组件,使用 composer… Read More

MySQL:mysql索引优化, mysql全文检索, mysql 不等于 优化, 全值匹配, 最佳左前缀法则

  Explain优化查询检测 所谓索引就是为特定的mysql字段进行一些特定的算法排序,比如二叉树的算法和哈希算法,哈希算法是通过建立特征值,然后根据特征值来快速查找,而用的最多,并且是mysql默认的就是二叉树算法 BTREE,通过BTREE算法建立索引的字段,比如扫描20行就能得到未使用BTREE前扫描了2^20行的结果,具体的实现方式后续本博客会出一个算法专题里面会有具体的分析讨论; EXPLAIN可以帮助开发人员分析SQL问题,explain显示了mysql如何使用索引来处理select语句以及连接表,可以帮助选择更好的索引和写出更优化的查询语句. 使用方法,在select语句前加上Explain就可以了: Explain select * from blog where false; mysql在执行一条查询之前,会对发出的每条SQL进行分析,决定是否使用索引或全表扫描如果发送一条select * from blog where falseMysql是不会执行查询操作的,因为经过SQL分析器的分析后MySQL已经清楚不会有任何语句符合操作;  … Read More

解决Mysql错误:Too many connections的方法, mysql_connect(): Too many connections

  通过sql语句参看你的最大连接数: SHOW VARIABLES LIKE "max_connections"   修复的方法,以下任选其一:  为了防止DDoS攻击,添加一个不修改任何配置,只是在代码中添加一个 sleep(1);  通过sql语句增加链接数: SET GLOBAL max_connections = 1024; 或者通过修改 my.cnf (/etc/my.cnf 或者你自定义的~/.my.cnf)配置文件,在 … Read More

mongodb 联表查询方法, PHP操作远程mongodb数据库

  本篇是 PHP操作远程mongodb数据库, MongoDB PHP Library, php connects with remote MongoDB 的延伸:   这里只对同库联表查询做介绍,跨库联表查询可能在之后也会介绍(因为公司架构变动,之后可能会联表查询) 我用到的联表查询有两种,一种是mongoose的populate,一种是$lookup populate populate是使用外键关联子表 例如现在有一张订单表结构(动态外键): var orderSchema… Read More

安装不同版本的PHP, 更换PHP默认版本, PHP多版本安装, How to Install Different PHP (5.6, 7.0 and 7.1) Versions in Ubuntu

  PHP(PHP的递归缩写:Hypertext Preprocessor)是一种开源的,流行的通用脚本语言,广泛使用并且最适合开发网站和基于Web的应用程序。它是一种可以嵌入HTML的服务器端脚本语言。 目前,有三种受支持版本的PHP,即PHP 5.6,7.0和7.1。含义PHP 5.3,5.4和5.5都达到了生命的尽头; 安全更新不再支持它们。 在本文中,我们将解释如何使用OndřejSurýPPA在Ubuntu及其衍生产品中安装所有受支持的PHP版本,以及Apache和Nginx Web服务器的大多数请求的PHP扩展。我们还将解释如何设置要在Ubuntu系统上使用的PHP的默认版本。 请注意,PHP 7.x是Ubuntu软件存储库中支持的稳定版本,您可以通过运行下面的apt命令来确认。 $sudo apt show php #OR $ sudo apt show… Read More

PHP: 控制循环执行次数, do…while与while , goto 跳转位置, if not repeat running

do-while (PHP 4, PHP 5, PHP 7) do-while 循环和 while 循环非常相似,区别在于表达式的值是在每次循环结束时检查而不是开始时。和一般的 while 循环主要的区别是 do-while的循环语句保证会执行一次(表达式的真值在每次循环结束后检查),然而在一般的 while 循环中就不一定了(表达式真值在循环开始时检查,如果一开始就为 FALSE 则整个循环立即终止)。 do-while 循环只有一种语法:… Read More