Thinking in LAMP - 老王的技术手册
百度首页 | 百度空间
 
文章列表
 
2008年05月12日 星期一 下午 04:51
作者:老王

很久以前,我写过一篇文章,说明了MySQL下的几种分页方式。这些天,陆续有几个人问过我其中的子查询方式,并对子查询分页的高效率表示质疑。今天我特意做了一个试验来验证这一点。

我选择了公司一个Discuz测试论坛作为试验体,其cdb_posts的记录数接近10000000行。

先验证最基本的分页方式:

在PhpMyAdmin里执行如下SQL:

 
2008年05月06日 星期二 下午 12:42
作者:老王

Web服务器为Lighttpd,使用fcgi方式运行PHP,跑一个Discuz论坛,在程序代码里(common.inc.php)使用了ob_start('ob_gzhandler')对页面进行压缩,出现问题:浏览器显示空白页面,如果去掉ob_start('ob_gzhandler')等相关代码则一切正常。

经过漫长的调试发现是因为ob_start('ob_gzhandler')之前有输出所致,下面在lighttpd下做实验验证一下:

<?php
ob_start('ob_gzhandler');

echo "hello, world.";
?>
 
2008年05月05日 星期一 下午 04:20
作者:老王

前几天买了笔记本,这可是我第一台本本,所以很是爱惜,每次用前都先洗手,容不得半点瑕疵。可想想公司SVN里的代码就头痛。一来杂乱的代码放在本本里感觉闹心;二来频繁的SVN读写会损坏本本的硬盘。

解决这个问题也很简单,用Samba共享服务器即可。

安装Samba的过程很简单,恕不多言。下面看看我们如何配置:

添加一个帐户:

smbpasswd -a laowang

编辑配置文件:

vi /etc/samba/smb.conf

 
2008年04月24日 星期四 下午 04:27
作者:老王

CakePHP的前景似乎越来越风雨飘摇了,这几天,CakePHP三巨头PhpNut,Gwoo,Nate正在起内讧,起因是Gwoo,Nate觉得PhpNut作为领导却对项目进展不上心,只顾打自己的小算盘。所谓占着茅坑不拉屎。

从我个人的观点,我一直不喜欢PhpNut,虽然他是CakePHP的老大,但是这厮相当狂妄,当初一句“Keep the house clean”就把Dho从核心团队扫地出门,足见其自以为是的本性,今天他也是罪有应得。

按最新的
 
2008年04月23日 星期三 下午 04:59
作者:老王

一台Web服务器:Lighttpd + PHP(fcgi)。本来一直运行好好的,突然发现若干PHP脚本不能运行了,页面显示500错误,Lighttpd错误日志记录:

(mod_fastcgi.c.2462) unexpected end-of-file (perhaps the fastcgi process died): pid: 0 socket: unix:/tmp/php-fastcgi.socket-3


开始以为是Lighttpd某些模块设置影响了PHP脚本的运行,可是反复试验没有发现问题,无意中发现是PHP的问题,其错误日志大小已经达到了2G。

# php-cgi -i | gre
 
2008年04月09日 星期三 下午 09:33
作者:老王

补充(2008-04-20):
本文中,似乎我对Web MVC的理解有问题,最近这个老生常谈的话题把我折磨的够呛。这里我再理理思路:传统的MVC概念是应用在桌面软件之上的,V可以查询M,C可以改变M。一条判断MVC的很重要的原则是View是否能动态的感知Model的变化,这在桌面软件上是很简单的,只要使用观测者模式就很容易办到,但是到了Web环境下,因为HTTP是无状态的,我们无法让View去观察Model
 
2008年04月08日 星期二 下午 09:41
作者:老王

印象中,已经遇到好几次类似“&#32769;&#29579;”这个样子的”乱码“了,每次都是到处Google找转换方法,今天才发现mb_convert_encoding本身就可以实现这个功能:

echo mb_convert_encoding('&#32769;&#29579;', 'UTF-8', 'HTML-ENTITIES');
 
2008年03月29日 星期六 下午 10:50
作者:老王

这个陷阱在PHP里存在很久了,先看代码:

<?php
$array
= array(1, 2, 3
 
2008年03月28日 星期五 上午 11:06
作者:老王

MySQL相当有个性。可能它也喜欢徐志摩的《再别康桥》:悄悄的我走了...。

今天遇到类似的情景,MySQL只是冷冷的说:MySQL server has gone away。

在官方文档里能看到对这个现象的解释(链接)。

大概浏览了一下,一般出现此问题的原因是因为某些原因导致超时。比如说程序中获取数据库连接时采用了Singleton的做法,虽然多次连接数据库,但其实使用的都是同一个连接,而且程序中某两次操作数据库
 
2008年03月24日 星期一 下午 09:20
作者:老王

前些天我写了一篇《PHP实现透明化事务处理》,讨论了如何利用装饰模式实现事务处理。如果具体点说,它是一个透明的装饰模式,因为装饰类和被装饰类实现了共同的接口。可惜当梦想照进现实的时候,我们猛然发现纯粹透明的装饰模式并不多,因为既然我们的类需要被“装饰”,很多时候就不可避免的要引入一些新方法,这些方法在原有的接口里是没有定义过的,对于这种情况,我们称之为半透明的装饰
 
2008年03月06日 星期四 下午 08:13
作者:老王

事务是极其重要的,不然代码就和炸弹差不多,即便现在它能正常运行,可是说不定啥时候就会爆炸。

先看看一般情况下,我们是如何实现事务处理的,以AdoDB为例,代码如下:

$conn->BeginTrans();
 
2008年03月04日 星期二 下午 08:31
作者:老王

==============================================

不要直接使用__autoload(),而应该使用spl_autoload_register(),这样可以避免出现命名冲突。

==============================================

尽量使用$_SERVER[‘REQUEST_TIME’](此变量在PHP5.1以上有效),而不是time(),因为time()不仅是一个函数,还涉及一次系统调用。

==============================================

Rowset和Resultset是两个很容易混淆的概念,它们的区别在于得到Rowset后,就
 
2008年03月03日 星期一 下午 04:30
作者:老王

什么样的代码算是好代码?逻辑区分清晰的代码就是好代码。可惜总有一些难啃的骨头,让我们的代码从好变坏,下面讲一个例子。

假设我们的代码是类似CakePHP风格的,其中有一个模型Article,还有一个控制器ArticlesController。

加入一些需求:

我们在ArticlesController控制器中操作Article模型的时候,如果执行了模型的save操作,那么就执行一些动作,比如说发送一封邮件,告诉老板某个文章已经保存了(老板说不定会因为这个功能而更加欣赏你)。

需求本身并不复杂,但是在哪
 
2008年02月26日 星期二 下午 08:39
作者:老王

SVN有很多钩子方法:

* start-commit
* pre-commit
* post-commit
* pre-revprop-change
* post-revprop-change
我们设置post-commit文件的内容:
/usr/bin/svn update /path/to/repository --username yourname --password yourpassword

设置可执行的权限:chmod +x post-commit

------------------------------------------------------------------------------

顺便说一句,别忘了设定Apache,以防止SVN目录被浏览:
 
2008年02月22日 星期五 上午 11:12
作者:老王

一直没弄清楚NuSOAP里如何处理可选参数,今天才发现解决方法异常的简单:

$nusoap->wsdl->addComplexType(
    
 
     
 
 
头版头条
 
 
     
 
关注项目
 
 
 
 
 
 
 
 
 
     
 
文章分类
 
 
Linux(30)
 
Apache(12)
 
Mysql(20)
 
Php(54)
 
 
 
 
Ruby(17)
 
 
     
 
其它
 
已有人次访问本空间
 
订阅RSS  什么是RSS?

您也想拥有这样的空间?请点此申请。
     


©2008 Baidu