Fluid idea for Life

随笔,杂记

nginx + php FastCGI安装

最近一直在捣鼓Nginx,在接手一台新的服务器时,我萌生了向Nginx移植的想法,并且很快开始实施了。中间遇到了若干问题,特记录,以备以后查找。

首先搭建了一台Centos 5的虚机练手,当然,Nginx的安装简单的很,即便是编译安装,也就是眨眼间的事,关键是php的安装。在网上看到很多人选择用lighttpd中附带的spawn-fcgi来启动php-cgi,不过再三权衡,还是选择了php-fpm,它相当于一个php的补丁插件,可以做到无缝连接,而且很有可能,以后会包含在php发行版中。php-fpm还有很多特性,这点在其官网上有介绍。

php-fpm的安装有两种方式,一种是以补丁方式嵌入到php中,整合后编译安装,适合于php的全新安装;如果php已经安装好了,又不想再重新编译,则可以选择第2种,独立安装php-fpm。

这里说说第一种方式,帮助文档中很详细:

export PHP_VER=5.2.10
wget "http://launchpad.net/php-fpm/master/0.6/+download/php-fpm-0.6-$PHP_VER.tar.gz"
tar -zxvf "php-fpm-0.6-$PHP_VER.tar.gz"
"php-fpm-0.6-$PHP_VER/generate-fpm-patch"

上面一条命令就是生成补丁文件,然后下载php文件,解压。

wget "http://us.php.net/get/php-$PHP_VER.tar.gz/from/us.php.net/mirror"
tar xvfz "php-$PHP_VER.tar.gz"
cd "php-$PHP_VER"

打补丁,然后编译:
patch -p1 < ../fpm.patch
./buildconf --force
 mkdir fpm-build && cd fpm-build
../configure --with-fpm --with-libevent="$LIBEVENT_SEARCH_PATH" && make

实际安装中,我选择的是php 5.2.11版本,服务器的系统为centos 4.x,运行buildconf命令更新配置文件时,提示autoconf的版本太高。Google的结果是php的开发者偏好autoconf 2.13这一颇古老版本,于是降级autoconf,执行成功。

执行configure时,还要根据选择,把常用的库带上,比如gd,curl,sockets,mysql,zip,mbstring等等。当然,前提是相关软件比如gd,libpng,jpeg,zip,zlib,mhash,mysql等等都已装好,以下是我的:

../configure --with-fpm  --prefix=/usr/local/php --with-jpeg-dir=/usr/local/jpeg --with-png-dir=/usr/lib --with-freetype-dir --with-gd=/usr/local/gd2 --enable-gd-native-ttf --with-mysql --enable-sockets --enable-force-cgi-redirect  --enable-mbstring --enable-ftp --with-mcrypt --with-mhash --with-curl --with-openssl --with-curlwrappers --enable-soap --enable-inline-optimization --with-zip --with-zlib-dir CFLAGS=-liconv

第一次安装时,没有带上gd库,后来想通过模块方式单独编译gd库,结果倒是可以用,但死活不支持jpg,直接编译,却成功了,个中原因,尚待分析。

强烈建议在编译时加上--prefix选项,这样方便以后卸载、升级。另CFLAGS=-liconv,是为了防止出现liconv致之类的错误, php官网上很多人指出这个长久以来的bug,但一直没有修复,总之不加就是编译不过去。

最后就是 make && make install了,编译结束后给出了一串提示。php相关文件都被装到/usr/local/php下了,同时,还自动生成了php-fpm的启动脚本,/etc/init.d/php-fpm,用法:

service php-fpm start|stop|restart ....

再配合nginx,就完工了。

Tags: nginx php-fpm

技术文章收藏

豆瓣网技术架构发展历程

接触php有好几年了,但一直没有真正从事过大中型站点的开发和设计,最近正面临这个压力,找了很多这方面的资料看,收获不小。

web编程的路还很长,需要学的东西还很多。

wordpress升级问题,更新皮肤以及其它

最近空间服务商发来邮件,说我博客程序消耗的服务器资源已超标,把index.php给禁了。检查下程序,已经很久没有安装新的插件了,该升级的也都升级到最新版本了,但问题还在。 从大约2.6还是哪个版本开始,wordpress开始支持在线自动升级,后来我就一直在线升级了,看来这其中留下了一些问题。在服务器上找到error_log,里面打印出大堆的错误信息,检查了下,初步断定是旧程序在作怪,于是备份,再清个干净,下个最新版本装下,不再打印错误信息,问题应该解决了。 以后升级还是手动比较保险。

Tags: wordpress

简单使用的php zip压缩类

php zip相关的类库很多,但个人觉得好用的不过,下面这个类是我从phpMyAdmin中提出来的,稍加改进,添加了addFilePath和saveAs两个方法。我觉得最方便的地方是,它能自动生成zip的文件结构,而不用预先创建。 类的代码也很简洁:

» 阅读全文

我也开始drupal了

最近在作一个类似sns的站点,考虑到效率问题,决定选择一个开源平台,选择标准很简单,希望能够比较方便的二次开发,且效率和性能都不错,选来看去,最后选择了drupal。drupal和wordpress在某些方面有些相似,它们并没有走纯正的MVC线路,而使用的是动态型脚本语言特有的Hook(钩子)方式。

我之前使用过一段时间的codeigniter框架,觉得很不错,效率和性能很好,但如果用来开发较大的应用,感觉有点别扭,反倒是用简单实用的Hook,写起来反倒觉得很自然。

在数据库设计上,drupal似乎还有提高的地方,仅仅是安装必须的核心模块,加上blog和forum,数据库中的表就有近50个,而安装完一些所谓的常用模块,表的数量刷的就增到近70个,有点吓人,最好的方法还是自己写模块。