• 23 六 2009 /  杂项

    php 5.2.10发布了,喜欢用fpm的朋友又要头痛怎么样打patch了,因为Andrei去忙他更感兴趣的项目去了,最新版本fpm一直维持在0.6.10针对php 5.2.8的版本上。下面介绍如何使用那个patch来升级php 5.2.10

    首先解压php 5.2.10的压缩包到一个目录,然后执行
    gzip -cd php-5.2.8-fpm-0.5.10.diff.gz | patch -d php-5.2.10 -p1
    会输出一些错误,可以忽略这些错误,然后修改php-5.2.10/sapi/cgi/fastcgi.c文件,找到下面的代码,将下面“-”号开头的代码删除。

             if (!tcp) {
                chmod(path, 0777);
    -       } else {
    -           char *ip = getenv("FCGI_WEB_SERVER_ADDRS");
    -           char *cur, *end;
    -           int n;
    -
    -           if (ip) {
    -               ip = strdup(ip);
    -               cur = ip;
    -               n = 0;
    -               while (*cur) {
    -                       if (*cur == ',') n++;
    -                       cur++;
    -               }
    -               allowed_clients = malloc(sizeof(in_addr_t) * (n+2));
    -               n = 0;
    -               cur = ip;
    -               while (cur) {
    -                       end = strchr(cur, ',');
    -                       if (end) {
    -                               *end = 0;
    -                               end++;
    -                       }
    -                       allowed_clients[n] = inet_addr(cur);
    -                       if (allowed_clients[n] == INADDR_NONE) {
    -                                       fprintf(stderr, "Wrong IP address '%s' in FCGI_WEB_SERVER_ADDRS\n", cur);
    -                       }
    -                       n++;
    -                       cur = end;
    -               }
    -               allowed_clients[n] = INADDR_NONE;
    -                       free(ip);
    -               }
    }

    然后在php代码的根目录下执行
    ./buildconf --force

    用于清除默认的configure脚本
    然后就可以标准的编译流程了

    ./configure --enable-fastcgi --enable-fpm
    make
    make install

    为什么这样就行了呢?因为patch执行的时候只有两个文件产生了冲突,并且都是跟实际程序没有太大关系的代码(例如一些显示输出),所以,把这些干掉自然就可以正常编译。而buildconf –force可以将配置文件脚本根据当前的代码情况自动生成匹配的新的,这个也适用于你要将一些而外的模块编译到php程序里。在此案例里面就是不用重新修复那个错乱的configure文件了,直接根据当前的情况来生成新的。

    从php-fpm邮件列表来看,php-fpm已经切换成BSD的授权形式了,有位大侠Michael Shadle正在跟php的作者协调,看看能不能将fpm整合到php的标准发行包里面,那样的话就省着每次都做patch了。

    在此呼吁一下,那位有经验在Linux下做C++开发的,是否愿意贡献一下将fpm移植进入php,我可以协助与Michael联系。愿php-fpm蓬勃发展!

    Tags: ,