从PHP4升级到PHP5

因为有些项目需要使用Zend Framework,需要将原来使用的PHP4升级到PHP5,下面对这次升级总结一下。

安装过程

我的安装环境是:windows 2000 server,Apache2,PHP5.2.3(php-5.2.3-Win32.zip)。
1) 解压缩zip包,将其中的php.ini-recommended改名为php.ini;对php.ini文件进行一些修改
; 打开这个项使得一些使用tag模板的程序如discuz、dedecms等正常运行
short_open_tag = On
; 修改php扩展组件的路径
extension_dir = "php安装目录\ext"
; 增加对mysql的支持,将下面这行文字前面的分号删除即可
extension=php_mysql.dll
; 设置session保存的目录,这项默认是被注释掉的
session.save_path = "C:/temp"

2) 在Apache中进行设置,打开httpd.conf,在文件中添加如下设置:
# 加载php5的apache模块
LoadModule php5_module "php5的安装目录\php5apache2.dll"
# 增加头文件
AddType application/x-httpd-php .php .php3
# 设置php.ini所在的文件目录
PHPIniDir "php安装目录"

然后重启apache就可以了。

最后说明一句:如果在Apache配置文件中没有通过PHPIniDir “php安装目录”设置了PHP5的根目录的话需要将PHP5的安装目录添加到%PATH%的环境变量中。

一些常见的问题

1) 运行网站提示不能连接mysql数据库
这是因为默认情况下php5不像php4那样至此MySQL的,所以需要手动将 extension=php_mysql.dll 打开使其支持MySQL。

2) 运行某些包含session操作的程序时出现下面的错误提示:

Warning: session_start() [function.session-start]: SAFE MODE Restriction in effect. The script whose uid is 2023 is not allowed to access /var/tmp/ owned by uid 0 in /configs/config.inc.php on line 9

Fatal error: session_start() [function.session-start]: Failed to initialize storage module: files (path: ) in /configs/config.inc.php on line 9

这是php5一个安全模式的bug,默认session的save_path是系统的临时目录,这样会要校验权限。在php.ini文件里,显式指定session的save_path(比如 c:/temp)然后重启web服务就解决了。

3) Apache 设置的时候 PHPIniDir 有什么作用?
与php4搜索php.ini是在%SystemRoot%下不同的是,PHP5按照以下顺序依次查找PHP.ini:

* PHPIniDir (Apache 2 module only)
* 注册表键值:HKEY_LOCAL_MACHINE—SOFTWARE—PHPIniFilePath
* 环境变量:%PHPRC%
* PHP5的目录 (for CLI), 或者web服务器目录(for SAPI modules)
* Windows目录(C:\windows or C:\winnt)

所以如果是Apache + PHP5的话可以使用 PHPIniDir 指定php5的配置文件php.ini的路径。

4) 安装 PHP5 之后打开 Discuz!或DedeCMS 的时候图片和论坛的信息都无法正常显示
解决的方法是打开php.ini,查找short_open_tag,将其设置为short_open_tag= on。对于Discuz!论坛如果还是显示有问题的话可以将forumdata/cache和forumdata/templates下面的文件删除然程序重新创建下缓存即可。

5) 使用网上发布的“汉字验证码”程序的时候只显示背景不显示文字或显示类似“Invalid font filename in xxx.php on line 57”的错误信息
与PHP4不同的是PHP5在安全模式下不能访问系统路径,而网上发布的验证码程序中的字体只有一个文件名而不包含路径,如果指定完整路径(比如:C:\Winodws\Fonts\simhei.ttf)的话则会提示没有访问的权限。估计这个应该是php默认配置权限所造成的,我目前解决的方法就是将字体文件从系统目录直接拷贝到程序目录下面。我估计应该通过设置一下php.ini文件可以实现之前php4的效果,但是目前我还没有找到设置的方法。

6) 文件无法上传?
上传文件的时候出现下面的提示:

File upload error - unable to create a temporary file in Unknown on line 0

这是因为默认的php.ini中没有设置上传的临时文件,默认为系统的临时文件地址。如果没有权限去读系统的临时文件目录的话就会产生上述错误。解决的方法就是去掉 upload_tmp_dir 前面的分号然后设置临时文件目录。

参考资料:
安装使用PHP5和MySQL5的一点心得
apache2和php5整合并支持mysql5
PHP 5.2.2 安全模式session_start权限问题的解决办法
Discuz!团队倾力整理–常见问题合集合

One thought to “从PHP4升级到PHP5”

发表评论

电子邮件地址不会被公开。 必填项已用*标注