最近一次升级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行的
function __initConstants() {
if (function_exists('ini_set')) {
ini_set('display_errors', '1');
ini_set('error_reporting', E_ALL);
改为:
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行的
if (isset($config['debug'])) {
if ($_this->debug) {
error_reporting(E_ALL);
修改为:
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);
}