文章标签 ‘php’

最近发现在WPMU(在MU还没整合进WP之前搭的)中即使在mu-plugins中加了强大的Akismet插件还是不能组织垃圾评论,遂写了一个简单的验证码插件,把原来在论坛上的写的验证码组件弄过来改了改,于是现在博客的回复要输入一个计算等式的验证码了,这样我想垃圾评论会更少了吧。 单击此下载插件 下载后请解压缩至wp-content/plugins目录,再开启即可。 顺带提一下wp的本地化的东西,linux下用xgettext生成po文件,用msgfmt生成mo文件,他们都在gettext包中。操作方法如下 #生成po文件,其中–key的值是wp中的本地化函数 $ xgettext -d auth_img_post –from-code=utf-8 –key=__ auth_img_post.php 修改po文件的注释信息替换掉其中的charset,并翻译 #生成mo文件 $ msgfmt -o auth_img_post.mo auth_img_post.po 在wp插件中用load_plugin_textdomain函数加载mo文件,此函数接受三个参数分别是域标识,mo所在文件夹的绝对路径,mo所在文件件的相对路径。第三个参数覆盖第二个参数,具体文档参看http://codex.wordpress.org/Function_Reference/load_plugin_textdomain

2010年9月7日21:49 | 15 条评论
分类: 兴趣所在
标签: , ,

终于这个系统可以告一段落了,进过了这几天的赶工,搁置各种工作,毅然上线了这个系统,链接http://bbs.byr.cn/chat。之所以要做这个类似于omegle的东西,也只是想熟悉一下memcached的使用,下面稍微为阐述一下系统思路: 首先是交互方式的确定,以现在的web技术水平,这种web在线聊天系统还是会选用定期的轮询作为技术的出发点,基于html5的websocket长连接在近期是有些文章但我看过的demo还是没有,另外论坛的访问很大一部分都是ie浏览器,所以不可能用这么新的技术。 其次是数据的存储,当然我最初就是为了用memcached而做这个系统,当然memcached也挺适合这种短时间内高并发的读写。其实在写的过程中还考虑过用传统的关系数据库和NoSql的数据库。其实用数据库也是可行的,但是要多做一些操作,比如过期的检测,由于基于web的聊天系统对于被动断线是不可能捕捉到的,这就意味这系统需要及时踢除没有心跳的用户。使用缓存系统能很好的解决这个问题,而对于数据库则需要自行维护数据的过期。这里提到两种不同的数据库还是有本质的区别,memcached与nosql对于数据的存储本质上是一样的或者也可以把memcached也归为nosql的一种。这种数据库相比于关系数据库来说在条件查询上捉襟见肘,这就需要我们不仅维护数据还要维护数据的索引,这也是我在写的过程中渐渐发现的(原来没有做过nosql的开发)。其实用mysql的内存表来做这个应用,我想也是一种很好的选择。 技术方案确定后就是数据结构,由于是kv系统,必须自行维护数据的索引供搜索使用,每个聊天的用户都有相应一个uid作为UUID,每个用户的数据在memcached中有一条记录,也就是相应的用户对象的序列化值。一个用户的数据包括 uid:唯一确定身份的id id:用户id cuid:陌生人uid lat:last access time status:用户状态 action:用户行为 queue:消息数组 然后整个系统无非就是一个状态机,根据不同的请求跳转到不同的状态。这里说一下消息的传递,用户发送消息先存储存在自己的queue中,陌生人轮询,如果queue中存在消息就取回来并清空queue数组,这样用户消息也不会长时间的积累,系统也不保存任何用户聊天记录。 其余的就没什么好说的了,就是一些js的交互,自己js也写的够寒碜的,有点惨不忍睹的地步了。这个系统暂且就这样吧,也没有太多时间进行维护了,希望以后有人能把他做的更好。下面记录一下memcached的相关安装 memcached直接在官方网站下载源码包即可,也就是其服务器端。地址是:http://memcached.org/解压缩后 #./configure –prefix=/usr/local/memcached #make #sudo make install 值得注意的是memcached需要libevent的支持,没有的话再configure会报错,这个直接可以再源上找到,安装libevent-devel就可以了。 memcached的使用方法很简单直接运行bin下memcached即可,-h选项有详细的参数说明,我的运行参数是: memcached -d -m 128 -u root -p XXXX -c 256 -v 一般来说都是用root用户来运行,而且memcached如果监听了整个网络的话没有ACL的机制,这就意味着如果别人知道机器memcached的端口就可以直接通信了,这俨然是缺乏安全的行为。网上对此也有很多解决方法,比如说用内网的方式,memcached服务器在内网里面,这样外网的用户就不可能访问到了。当然在unix下最直接的方法就是用iptables,指定ip访问指定端口。 对于memcached的客户端,不同语言有不同的实现。在php中有两种客户端供选择memcache和memcached,后者看过去比前者功能稍多。我用的是前者,从http://pecl.php.net/package/memcache下载安装包,解压缩后 #phpize #./configure –enable-memcache #make 把编译出来的so文件在php.ini中加载即可

2010年8月13日11:35 | 2 条评论
分类: 兴趣所在
标签: ,

1. cakeError方法是属于object类的,而且此方法引用当前的controller,如果没有new cakelib中的。而且只会执行beforeRender的方法,不会执行beforeFilter,毕竟不存在一个action 2. controller有三个属性 base,webroot,here。其关系是 webroot = base. “/”;here= webroot.path;path就是当前的路径。对于webroot官方文档的解释是“Helpful if your application is placed in a folder under the current domain name”,其实就是web目录相对于domain的根目录的路径。 3. cakephp自带的compress功能是优先于route dispatch的,也就是说上来先检测资源是否可压缩,如果可以就直接压缩返回,不过有route以后的阶段了。 4. controller的redirect方法是不用考虑当前的webroot的,此方法会自动header到webroot(web目录)的某个路径上去。

2010年5月28日00:57 | 没有评论
分类: 兴趣所在
标签: ,

用于判断ip的包含,冲突 define(‘MASK_NUM_V4′, ’32’); define(‘MASK_NUM_V6′, ’64’); /** * exchange ipv6 text to array(int[high], int[low]) for 64-bit system * @param $ipv6_address(string) ipv6 text * @return array(high(64bit), low(64bit)) * @author xw */ function ipv62long($ipv6_address){/*{{{*/ $res = array(); $num = 0; $i = 0; $str = inet_pton($ipv6_address); while($i <= 15){ $num = $num << 8; $num += ord($str[$i]); if(($i […]

2010年5月21日21:42 | 没有评论
分类: 兴趣所在
标签: ,

偶然碰到关于rss标准中的时间的定义的问题,上网查了下rss2.0的标准看到时间的定义是遵循RFC822中的一段定义 date-time = [ day “,” ] date time ; dd mm yy ; hh:mm:ss zzz day = “Mon” / “Tue” / “Wed” / “Thu” / “Fri” / “Sat” / “Sun” date = 1*2DIGIT month 2DIGIT ; day month year ; e.g. 20 Jun 82 month = “Jan” / “Feb” / “Mar” / “Apr” / […]

2010年4月26日22:51 | 5 条评论
分类: 兴趣所在
标签: ,

just mark http://daniel.carrera.bz/2008/12/comparison-of-php-frameworks-part-0/ http://daniel.carrera.bz/2009/01/comparison-of-php-frameworks-part-i/ 老外写文章真是负责,为了写这篇文章花了那么久的时间做测试,cake的确在各项指标中略占下风,文章中提到的一些不足之处也在开发中遇到了,还好稍微改了下核心代码,否则严重影响效率。 看来老外还是很偏向于yii和CI的,可以研究下了。。。

2009年12月14日22:32 | 没有评论
标签: ,

一直没怎么深入的研究这个基础框架,最近跟随着官方文档好好的琢磨了一下,体验了一下这个被大牛们推荐的东西,下面是一些感悟。 人人都说他是rails在php上的翻版,可惜没接触过rails,整体的结构俨然是MVC的模式,zend等其他框架也遵循这种整体设计思想。有少许不同的地方,cakephp的MVC耦合度比zend要高上许多,cakephp中view和model在核心库中完全连在了一起,这对于view和model的替换产生了一定麻烦,比如要换一个view的表现或是自己实现一些独立的model。 对于view的替换,如果要从controller部分将view斩草除根那么框架本身的helpers,layout就根本用不到,cake没有提供一些有效的接口来规范核心的调用,这点zend似乎要做的好些(记得是有一个viewRender的helper用来设定具有实现接口的view),如果要替换视图现在也只能在controller上重写尽量保证能和controller高耦合。 view其实还好对于model的剥离来说最后只能修改核心库了。cake的model向来不被人看好,甚至有点kb,类的实现及其复杂,对于model的载入也令人有点费解,按照文档所说,除非你你指定,否则会自动加载与controller同名的model,而且目前还没发现核心库没有提供取消这种机制的方法。也就是说你不想用他的model也得用。最后迫不得已只能改核心的代码将model的载入删去了。。。 以上的剥离结果导致的是一些变量的浪费,显然不可能在controller中把所有涉及view和model的部分全部删去,现在也就能做到阻止了他们的自动联系,打到了初期的要求。 其实这次选择cake还是有一定道理的,为了能实现基本的MVC,zend太庞大了,cake相对于它要简单许多。但cake的自由度降低了满多,zend不愧是官方的东西。 当然了,框架毕竟是框架,整体的设计应该在框架之上,用框架来弥补设计的不足。

2009年7月27日10:37 | 没有评论
分类: 兴趣所在
标签: ,

Nathan A. Good, 高级信息工程师, Consultant 2009 年 6 月 29 日 PHP 的版本 V6 包含一些新特性和语法改进,从面向对象的角度看,PHP6 更加易于使用。其他重要特性(比如在许多核心函数中支持 Unicode)反映了 PHP V6 力争获得更好的国际通用性支持和健壮性。 PHP 已经很流行,它不仅用于各个领域(根据 Netcraft),而且还得到大部分 ISP 的支持和知名 Web 公司(比如 Yahoo!)的使用。此外,未来的 PHP 版本将引入新的特性以提高其易用性和安全性。您已经为使用 PHP V6 做好准备了吗?假设您要升级到 PHP V6,您的脚本能正常执行吗?或者需要进行一些更改?本文主要介绍 PHP V6 的变化(一些特性向后支持 PHP V5.x 版本),您可能需要根据这些变化对当前的脚本作出一些调整。 如果您尚未使用 PHP,并且一直考虑使用它,那么可以看看它的最新特性。这些特性 —— 从 Unicode 支持到 XML 支持 —— 将让您能够更加轻松地编写出特性丰富的 PHP 应用程序。 PHP V6 […]

2009年7月12日14:11 | 没有评论
标签:

code sinppet Authors: Roman Roan, Wyatt Neal Code Snippet was created by Roman Roan and originally hosted at http://blog.enargi.com. It is powered by the GeSHi engine and is quite possibly the best syntax highlighting engine for WordPress. A large number of languages are supported and it can be easily extended. Since his blog is no […]

2009年7月6日13:16 | 没有评论
分类: 兴趣所在
标签: , ,

转自 http://hi.baidu.com/thinkinginlamp/blog/item/2fd89e51bc60e62043a75b4d.html 这个陷阱在PHP里存在很久了,先看代码: $array = array(1, 2, 3); foreach ($array as &$v) {} foreach ($array as $v) {} print_r($array); 运行代码,得到的结果却是: Array ( [0] => 1 [1] => 2 [2] => 2 ) 可以发现,经过两次foreach后,最后一个元素由3变成了2。 为什么会这样呢?这是因为第一次foreach的时候$v成为了一个引用变量($array[2]),如此,当第二次foreach的时候,实际上只是在对这个引用变量($array[2])进行了若干次赋值而已。 第一次:$array[2] = 1,此时$array各元素分别为1,2,1 第二次:$array[2] = 2,此时$array各元素分别为1,2,2 第二次:$array[2] = 2,此时$array各元素分别为1,2,2 一不小心很可能会掉入这个陷阱,为了避免这个问题,需要在第一次foreach后执行unset($v),解决方案有点丑陋,但也没有办法,PHP脚本里的变量一旦生成就在整个脚本中有效,不像Java中,变量是块级别的,仅仅在对应的{}中有效。 今天偶然发现这个,算是我小白吧。。。不过bug合情合理,常常foreach的变量的冲突导致程序bug,谨记!

2009年3月8日22:24 | 没有评论
分类: 他山之石
标签: ,
第1页/2页12