PHP5.3 和CakePHP1.2的兼容性问题

2009年9月30日 | 分类: 编程语言 | 标签: , ,

最近一次升级Archlinux,PHP升级到了5.3,遇到了两个问题:

1.Arch里面PHP更换了打包的方式,PHP的Aapche模块被独立封装为php-apache模块,所以安装了php包之后还要安装 php-apache包(如果你用Apache作为你的Web server ^^ )。

2.另外就是Cakephp1.2跟PHP5.3的兼容性问题了。安装PHP5.3之后,运行Cakephp应用遇到了错误:

一个是提示strtotime()出错,最终修改php.ini的 date.timezone 解决,改为:

date.timezone = Asia/Chongqing

时区的列表可以到这里查看:http://us.php.net/manual/pt_BR/timezones.php

另外就是报类似以下的错误:

Deprecated: Assigning the return value of new by reference is deprecated…

这个有两种解决方法,一是将Cakephp升级到最新的Cakephp1.3dev版本,但是现在1.3版本并不是稳定版本,如果想继续使用1.2 版本的话,需要:

1.修改cake运行库下面cake/console/cake.php文件。

将141行的

141
142
143
144
145
function __initConstants() {
    if (function_exists('ini_set')) {
       ini_set('display_errors', '1');
       ini_set('error_reporting', E_ALL);
...

改为:

141
142
143
144
145
146
147
148
149
function __initConstants() {
   if (function_exists('ini_set')) {
      ini_set('display_errors', '1');
      if (defined('E_DEPRECATED')) {
        ini_set('error_reporting', E_ALL & ~E_DEPRECATED);
      } else {
        ini_set('error_reporting', E_ALL);
      }
...

2.修改cake/libs/configure.php
将292行的

292
293
294
295
if (isset($config['debug'])) {
    if ($_this->debug) {
        error_reporting(E_ALL);
......

修改为:

292
293
294
295
296
297
298
299
if (isset($config['debug'])) {
    if ($_this->debug) {
        if (defined('E_DEPRECATED')) {
          ini_set('error_reporting', E_ALL & ~E_DEPRECATED);
        } else {
          ini_set('error_reporting', E_ALL);
        }
......
目前还没有任何评论.

注意: 评论者允许使用'@user空格'的方式将自己的评论通知另外评论者。例如, ABC是本文的评论者之一,则使用'@ABC '(不包括单引号)将会自动将您的评论发送给ABC。使用'@all ',将会将评论发送给之前所有其它评论者。请务必注意user必须和评论者名相匹配(大小写一致)。