08 2012 档案

摘要:本文目的 PHP的全局错误处理,在开发项目的时候很有用,可以帮助开发者快速定位一些问题,提高工作效率。默认情况下,全局错误会直接输出,但是最近开发时使用的一个框架库对全局错误处理进行了设定,导致很多错误信息没有输出,在定位问题上有一定的耗时。所以,研究了一下此库的实现,发现它设定了error_reporting和set_error_handler,导致此现象。现在记录一下这两个函数的用法,作为备... 阅读全文
posted @ 2012-08-19 16:00 bourneli 阅读(3819) 评论(0) 推荐(0)
摘要:本文目的最近有个项目需要对数据进行搜索功能。采用的LAMP技术开发,所以自然想到了MySQL的全文检索功能。现在将自己搜集的一些资料小结,作为备忘。MySQL引擎据目前查到的资料,只有MyISAM引擎支持全文检索(full text index),查询效率高。但是有局限,不支持事务和外键。Innodb支持事务和外键,但是不支持全文检索。所以,如果需要全文检索的数据,需要使用MyISAM引擎创建表。MySQL中文全文检索很遗憾,目前mysql不支持中文全文检索。目前有两种解决方案方案1:使用mysql中文检索插件,个人认为可控性较差,虽然使用方便,但是如果后期插件出现问题,比较难解决。优点就是前 阅读全文
posted @ 2012-08-09 18:26 bourneli 阅读(11743) 评论(4) 推荐(0)
摘要:本文目的本文探讨了php标准扩展sysvshm库中的函数shm_get_var返回变量的copy还是reference。问题背景php标准扩展中的sysvshm提供了php访问共享内存的能力,而且数据的最小粒度是变量,这样可以免去手动变量序列化和反序列化,比另一个标准扩展shmop好使用。但是,如果假设有一个50M的数组放到共享内存中,反复的访问此变量,是否会影响系统性能?如果shm_get_var返回的是变量引用,那么性能开销不大,因为每次返回的都只是内存的“指针”,不会拷贝真实数据。如果返回的是copy呢?那么每访问一次,就需要拷贝50M左右的内存,如果访问频率过大,那么就会导致性能瓶颈。 阅读全文
posted @ 2012-08-05 16:00 bourneli 阅读(1131) 评论(0) 推荐(0)
摘要:这几天,由于工作原因,需要将一个php写的后台程序重串行执行改成并行执行。这样必然涉及到多线程/多进程相关技术。PHP貌似没有成熟的多线程机制,而有相对成熟的多进程机制。多进程编程,必然涉及到IPC(Inter-Process Communication)。PHP的IPC技术还是相当多的,可以在php源代码目录下(PHP_SRC/ext)看到sysvshm,sysvsem,sysvmsg,shmop等扩展,这些都可以用于IPC,下面简单介绍一下:pcntl - 提供进程相关操作函数sysvsem - 信号量,全称为system V semphore,可以用于限制访问共享资源的进程数目,一般设置 阅读全文
posted @ 2012-08-03 18:37 bourneli 阅读(1221) 评论(0) 推荐(0)
摘要:本文目的这几天开发了一个PHP CLI程序,用于后台定时调度执行一些任务。此脚本采用了PHP的多进程(pcntl_fork),共享内存和信号量进行IPC和同步。目的是将串行的任务并行执行,缩短执行时间。可是在工作子进程中,访问myql时一直报错,通过mysql_error返回的信息却是冷冷的一句话“MySQL server has gone away”。简单说一句自己挂掉了就完事,太不负责任了。经过仔细搜索,终于发现问题的原因,在此做个分享,也作为备忘。什么导致“MySQL server has gone away”据官方文档描述,主要有以下一些原因导致此异常出现(我粗略的翻译一下,以原文为准 阅读全文
posted @ 2012-08-02 17:23 bourneli 阅读(2856) 评论(1) 推荐(0)