关于博主
也没啥文化
平生爱小说
还有看漫画
忙时做做事
闲时编编码
人生自逍遥
哪管它天塌!
友情链接
热门文章
LANMMP
yuql 2012-04-11 16:42:11 发表于 PHP 分类
LANMMP的架构是这样的,
服务器系统都是基于Linux的nginx首先用来处理前端的用户的高并发请求,
并将请求交给后端的专门的缓存服务器用来提高效率,
如果缓存上没有用户请求的数据再由缓存服务器提交给后端的apache来真正的处理来自用户的请求,
期间apache很可能会用到mysql服务,
apache会将处理完的用户请求在提交给Nginx,
最后再由Nginx反向代理出去
Linux-Apache-MySQL-PHP网站
yuql 2012-03-07 12:04:27 发表于 PHP 分类
对于大流量、大并发量的网站系统架构来说,除了硬件上使用高性能的服务器、负载均衡、CDN等之外,在软件架构上需要重点关注下面几个环节:使用高性能的操作系统(OS)、高性能的网页服务器(Web Server)、高性能的数据库(Databse)、高效率的编程语言等。下面我将从这几点对其一一讨论。
操作系统
Linux操作系统有很多个不同的发行版,如Red Hat Enterprise Linux、SUSE Linux Enterprice、Debian、Ubuntu、CentOS等,每一个发行版都有自己的特色,比如RHEL的稳定,Ubuntu的易用,基于稳定性和性能的考虑,操作系统选择CentOS(Community ENTerprise Operating System)是一个理想的方案。
CentOS(Community ENTerprise Operating System)是Linux发行版之一,是RHEL/Red Hat Enterprise Linux的精简免费版,和RHEL为同样的源代码,不过,RHEL和SUSE LE等企业版,提供的升级服务均是收费升级,无法免费在线升级,因此要求免费的高度稳定性的服务器可以用CentOS替代Red Hat Enterprise Linux使用。
Web服务器、缓存和PHP加速
Apache是LAMP架构最核心的Web Server,开源、稳定、模块丰富是Apache的优势。但Apache的缺点是有些臃肿,内存和CPU开销大,性能上有损耗,不如一些轻量级的Web服务器(例如nginx)高效,轻量级的Web服务器对于静态文件的响应能力来说远高于Apache服务器。
Apache做为Web Server是负载PHP的最佳选择,如果流量很大的话,可以采用nginx来负载非PHP的Web请求。nginx是一个高性能的HTTP和反向代理服务器,Nginx以它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。Nginx不支持PHP和CGI等动态语言,但支持负载均衡
Copy On Writer
yuql 2011-11-02 15:41:06 发表于 PHP 分类
$a = str_repeat("0", 10000);
$b = $a;
$a[0] = "1";
$a 是一个非常大的字符串,如果 $b = $a 的时候,进行复制,那要耗费很多内存 和 cpu,这样非常的不划算,万一,下面的代码并不修改$a 和 $b 那复制根本没有必要。当然,$a 在后面又被修改了,这个时候,必须进行复制了,否则就不符合逻辑了。但是,现在问题来了,怎么知道,$a 在修改的时候,要进行复制呢,必须要有这样一个标记。方法就是采用引用计数。引用计数还被用来进行内存的管理。基本的流程是这样的:
1: 创建一个变量,可以保存 10000 个 0 的这样一个字符串。
2: 创建一个变量符号 a ,这个变量符号引用 这个变量。注意,变量符号 和 变量不是一回事情,这两者是分离的。
如果从C语言的角度来说,PHP大概完成这样一件事情:
char *varname = "a";active_symbol_table 是PHP的一个符号表,所有能访问到的变量都在这个里面,他是一个哈希表。var 这个变量,保存了 10000 个 0 这个字符串。而且是zval的结构,zval的结构如下:
size_t varname_len = strlen(varname);
zend_hash_add(EG(active_symbol_table), varname,
varname_len + 1, &var, sizeof(zval*), NULL);
typedef struct _zval_struct {
zvalue_value value;
zend_uint refcount;
zend_uchar type;
zend_uchar is_ref;
} zval;
typedef union _zvalue_value {
MVC框架分析(一)
yuql 2011-09-02 16:23:19 发表于 PHP 分类
一、 session共享机制
框架中使用memcached来实现session共享。之所以使用memcached来保存session,我认是为了应对以后用户的大规模访问,毕竟这是移动的项目,用户基数大;为以后应用的集群部署,实现session共享,使多台服务器之间保持会话的统一。
至于不使用数据库的方式来保存session,也应该是考虑到数据库的负担,和读取数度的考虑。毕竟memcached是内存缓存。
memcached的缓存是一种分布式的,可以让不同主机上的多个用户同时访问, 因此解决了共享内存只能单机应用的局限,更不会出现使用数据库做类似事情的时候,磁盘开销和阻塞的发生。
二、 模块的加载
框架在index.php中,调用控制器的addModule方法,加载所有的业务模块。
在addModule方法中,为了应对不同城市之间业务的切换,根据citycode的不同,首先加载当前城市相应区县模块到模块队列;如果不存在,则加载当前城市的默认模块;如果仍然不存在,则会加载框架的默认模块。
然后在index.php中,调用控制器的_run方法,实例化模块队列中的类。
但这样的做法,存在几点问题:
1、 所有的模块都在index.php中加载,然后统一实例化。某些当前页面不需要用到的模块,也会被加载进来。随着业务的不断增加,需要加载的模块越来越多,导致系统会耗费很多资源来加载一些根本不会用到的模块。
经测试,加载现在所有的82个模块共耗费0.022152900695801ttitit秒。若只加载一个CitySwitchModel模块,只耗费0.00099802017211914秒。平均每多加载一个模块,会多耗费2.7*10^-4秒。
2、 在加载模块时,并没有判断该类是否存在于模块队列。而且在实例化该类时,也没有使用单例模式。这样可能会导致模块的重复加载。
经测试,在index.php中,调用addModul
ECSHOP后台管理自动生成程序
yuql 2011-04-13 14:09:48 发表于 PHP 分类
生成文件包括(后台PHP文件、语言文件、菜单文件、权限文件)
功能包括(字段列表、搜索、增删改功能)
涉及文件目录:
languages/zh_cn
languages/zh_cn/admin
admin
admin/includes
admin/templates
自动创建文件:
languages/zh_cn/admin/表名.php
admin/表名.php
admin/templates/表名_listt.htm
admin/templates/表名_info.htm
替换相关文件:
languages/zh_cn/admin/log_action.php
admin/includes/inc_menu.php
languages/zh_cn/admin/common.php
admin/includes/inc_priv.php
languages/zh_cn/admin/priv_action.php
使用方法:
1、将程序解压。
2、放到ECSHOP根目录。
3、创建要生成的数据库表。
4、运行auto_create.php文件。
5、按照提示进行设置并自动创建。
建表示例:
CREATE TABLE `ecshop_test`.`ecs_auto_create` (
`xx_id` SMALLINT( 5 ) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '测试ID',
`xx_name` VARCHAR( 500 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '测试名称',
`description` VARCHAR( 1000 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '描述',
`flag` TINYINT( 1 ) UNSIGNED NOT NULL DEFAULT '0' COMMENT '标志',
`price` DECIMAL( 10, 2 ) NOT NULL COMMENT '价格',
`add_time` INT( 10 ) NOT NULL COMMENT '添加时间',
[转]十款提高开发效率的PHP编码工具
yuql 2010-09-07 09:37:49 发表于 PHP 分类
1 . PHPUnit
测试在软件开发中是相当重要的一环,但很多开发者都只是给予很少的时间去测试,因为这工作的确相当耗时,枯燥并且容易出错。为了解决以上问题,自动化测试工具能让开发者编写一系列测试脚本,这些脚本能容易地执行,并且可以根据计划任务去执行。这些自动化测试工具通常提供了测试报告,里面详细描述了每次测试的结果。PHP开发者在自动测试化方面,有一个相当不错的测试框架PHPUNIT。基于非常流行的测试驱动开发方法,如xUnit,PHPUNIT允许开发者使用PHP的语法去编写测试用例,然后用很简单的命令行工具去执行测试。甚至你可以将PHPUNIT与一些持续集成工具如phpUnderControl整合(http://phpundercontrol.org/),这在本文稍侯会讨论。如果你不熟悉phpunit,可以查看之前的文章Use PHPUnit to Implement Unit Testing in Your PHP Development(http://www.phpbuilder.com/columns/Jason_Gilmore052510.php3),详细讲述了如何使用phpunit。
2. Phing
随着WEB开发项目变得越来越复杂,开发者面对一大堆部署的任务,这些任务不仅仅是从开发者的机器上将文件传到生产服务器上那么简单了。比如避免上传开发环境的文件,如图片模版,处理服务器指定文件的权限和参数配置,象用户名口令,以及如何当发生变更错误时尽快恢复,这些问题都是开发者经常要碰到的。为了解决这些问题,开发者使用了专门的构建工具,它能使文件的传输过程更高效,因为它只同步传输改变过的文件。构建工具也能够很容易根据部署的环境而定
Facebook发布PHP改进项目——XHP
yuql 2010-07-21 11:40:50 发表于 PHP 分类
什么是XHP?
XHP是一个PHP扩展,通过它,开发人员可以直接在PHP代码中内嵌XML文档片段,作为合法的PHP表达式。这样,PHP就成为一个更为严格的模板引擎,大大简化了实现可重用组件的工作。
简单举例
<?php
$href = 'http://www.********.com';
echo <a href={$href}>wengdo</a>;
注意第三行代码中的语法,其中echo后的不是字符串。这是新的语法,主要是将XHP解释到PHP。
在{}里的任何内容都是完整的PHP表达式,在这里的{}不同于双引号字符串;双引号字符串仅能包含变量。你可以定义能在PHP中实例化的任意元素,在每个元素包含下,你可以创建一个类的实体。定义了一个新的元素,就等于定义了一个新的类。XHP会设置一组带有大部分HTML的预定义元素。
注意:一定要包含init.php这个文件,这个文件在代码库里的php-lib目录里。这个XHP扩展只增加了XML语法的处理,目前的元素都是在PHP里定义好了的。包含了XHP核心库在PHP的代码里,那就意味着你可以在你的应用里使用XHP,但是它提示你由于XHP的升级引起的不兼容导致你的错误。
复合结构
注意XHP结构可能是一个专门的复合结构。这是一个正确的XHP程序:
<?php
$post =
<div class="post">
<h2>{$post}</h2>
<p><span>Hi,Wengdo.</span></p>
<a href={$like_link}>******.com</a>
XHP有一个优势就是字符串解释没有结束,它在编译的时候会强制要求纠正标记的错误结构。也就是说,这个表达式 $foo = <h1>Header</h2>; 是一个不正确的表达式,因为你没有关闭<h1>标签而是用的</h2>.当在设计一大块的标记的时候,这时候就比较难完全的发现和纠正这个错误。用XHP编译的时候会先检查你的代码,并且会拒绝执行,直到你纠正错误为止.
动态结构
有时,创建一组元素并作为某一元素的子节点进行插入,是非常有用的。所有的XHP对象都支持appendChinld方
SEO之文章关键字获取
yuql 2010-03-31 16:32:20 发表于 PHP 分类
对于SEO而言,关键字无疑是最重要的几个东东之一。
本BLOG的网站关键字是通过对标题进行中文分词来获取关键字的。今天在网上找到一篇通过DZ
来获取文章关键字的代码,非常不错,可以借鉴下。呵呵
//通过DZ获取文章关键字,输入标题和内容 即可返回5个关键字数组
function getTags($title,$content){
$subjectenc = rawurlencode(strip_tags($title));
$messageenc = rawurlencode(strip_tags(preg_replace("/[.+?]/U", '',$content)));
$subjectenc =substr($subjectenc,0,60);
$messageenc=substr($messageenc,0,1200);
$data = @implode('', file("http://keyword.discuz.com/related_kw.html?title=$subjectenc&content=$messageenc&ics=utf-8&ocs=utf-8"));
$kws = array();
if($data) {
$parser =
搜索引擎开发(一)--概述
yuql 2009-12-22 19:42:06 发表于 PHP 分类
最近准备学习一下搜索引擎的相关知识,同时,想为自己的blog和友情站点做一个搜索引擎,只收录本blog和友情站点的内容。
说到搜索引擎,大家都知道有谷歌(Google)、百度(Baidu)、雅虎(Yahoo),以及为教育网、科研网提供搜索服务的天网搜索。
一、搜索引擎的工作原理
搜索引擎主要包含三个部分:网页搜集、网页预处理和查询服务。
1、网页搜集:就是我们常说的蜘蛛(spider)、爬虫。工作原理就是将网页集合看成一个有向图,搜索的过程是从给定的URL集合S开始,
沿着网页中的链接,按照深度优先或宽度优先等原则进行遍历,不停地从S中移除URL,下载相应的网页。并解析下载网页中的URL,检
查是否已经访问过,未访问过的URL加入集合S。
由于不可能搜索所的有网页,我们通常会设置搜集的层数,如2层。由于某些网页是动态生成,spider则无法搜集到的网页中的URL,因
此,为了方便搜索引擎的搜索,我们常常需要对网站做静态化处理。如使用apache的重写功能等。
如果你的网站不想被某些搜索到,则可能在网站的根目录放一个robot.txt,设置搜索引擎的访问权限。(至于具体robot.txt的书写规则,请
Google或Baidu之)。
2、网页预处理:由于搜集到的网页通常为HTML格式的,包含大量HTML标签,而对索引来说,只处理文本信息,因此,需要把网页中的
文本内容提取出来,建立索引。
网页内容提取主要包括4个方面:关键词的提取、重复或转载网页的消除、链接分析和网页的重要度计算。
3、查询服务:也就是根据用户输入的关键字,从索引库中找出相应信息,并进行组织显示到客户端的过程。



