§ ITPOW >> 文档 >> PHP

让 PHP 5.2 和 5.3 在 Apache 中并存 - beta 0.2

作者: 来源:泰麒工作室 日期:2009-10-14

6 月的最后一天… .PHP5.3 发布了…沉寂了好久的 PHP.net 终于有了些许动静… .

东西还没来得及体验 , 就说说看新版发布说明的体验吧 :

1. 如约引入了 namespace ( 命名空间 ) 的概念

用法还是延续其诡异的语法 ( 其实就是已定义的符号不会被用作其他算法 . 也许这样解释的效率会比较高吧 !)

\namespace\somesome::other

参见 :http://cn2.php.net/manual/en/language.namespaces.rationale.php

2. 匿名函数 , 引入了闭包操作 .( 待补充 ) 看到了一个新的关键字”use”

参见 :http://cn.php.net/manual/en/functions.anonymous.php

3. 引入了 late static binding , 待补充

4. 引入了几个扩展

intl C/C++ 中 ICU 的封装器 , 用于解决字符集编码的相关问题

phar 看到这个不明白 ? 知道 java 有 jar 不 ? 明白了吧 - -

fileinfo 弥补 PHP 在文件处理中的一些不足 , 比如判断文件类型

下面进入正题…

新版本稳定版的体验固然很好 , 但是难保安装了新的 PHP 环境不会对之前已开发的工作造成影响 . 所以我才有了本文的尝试 , 大家也该注意到的 , 这是个 beta 版本的文章 , 之所以要加个 beta 是因为本章的用法会有很多不足 , 这些不足也是有待日后改进的 .

系统环境 : Windows home Basic

软件环境 : Apache 2.2.11 with PHP 5.2.8 (Server API - Apache 2.0 Filter)

5.3 的 Pack : 从 http://windows.php.net/download/ ( 新的域名 -_-) 下载的 “VC9 x86 Non Thread Saf” (XP 的环境推荐 使用 VC6 编译的 )

构想完成过程 : 本来想直接替换掉 5.2 的…但是下载的 5.3 的包里居然没有 Apache 的 Filter( 其实这是我做这次尝试的直接原因 ). 最初的构想是在不同的 web server 上通过占用不同的端口来达到两个环境并存的目的 . 但是下了 Nginx 却发现没有 fastcgi - -. 网上兜了一圈也没发现 , 后来在 fastcgi 的主站 http://www.fastcgi.com/drupal/ 发现 ,apache 也有相关的 mod, 又想到一般 apache 的 mod 之间是不冲突的 . 这样一来 , 就可以启动一个 apache 带起两个 PHP 环境了 .^_^ 我真是个天才 .( 无限 YY 中… )

配置前准备 : 拿定主意后 , 就再次在网上兜了起来… ( 兜的过程描述省略一万字 - -), 最终…我完成了配置 : 具体操作如下

本次操作采用的 apache 的 mod 为 mod_fcgid , 你也可以采用其他的 fastcgi 模块…

操作过程

首先去 http://www.apachelounge.com/download/ 下载对应版本的 mod_fcgid

解压后 , 将文件 mod_fcgid.so 放到 apache 目录下的 modules 里

进入配置目录 conf, 在其下新建 文件 : mods\fcgi.conf (mods 为任意目录名 , 这样放只是便于配置分类而已 )

在 conf 文件末尾处加入如下内容

Include conf/mods/fcgid.conf

用于包含你刚建立的文件 .

配置 mods\fcgi.conf 来配置 fcgid

将以下内容修改后复制进去

# 加载 FastCGI 模块

LoadModule fcgid_module modules/mod_fcgid.so

# 配置 FCGId

# 添加头信息文件类型 应该是 apache 用来判断如何处理文件的 , 这里使用的是 phtml 是避免与之前已经配置好的 PHP 冲突

AddHandler fcgid-script .phtml .fcgi

# CGI 执行命令

FCGIWrapper “D:/php5.3/php-cgi.exe” .phtml

# 配置目录信息

# 注意这里的 ExecCGI 选项

Options Indexes FollowSymLinks ExecCGI

AllowOverride None

Order allow,deny

Allow from all

SetHandler fcgid-script

然后在你原来存放 php 文件的目录下新建一个 fcgi 目录即可 . 关于如何配置目录 , 以及脚本路径别名 , 本文不讨论 .

在 fcgi 目录下新建一个 index.phtml 输入

配置的不足之处 :

1. 无法默认访问 index.phtml 即使已经配置了 DirectoryIndex

2. 没有考虑到 php5.3 libmysql 的存放位置 , 因为只是用于体验 5.3 , 所以这点可以忽略

最后放上两张最终结果图

PHP 5.2 on apache

PHP 5.3 on apache

相关阅读

相关文章