CodeIgniter 2.1.0 的白屏错误调试

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 今天在配置一个CodeIgniter 2.1.0时,遇到白屏,系统报500错误,但是Apache的错误日志中看不到任何错误信息输出。 经过简单的定位后,发现是由于在autoload中配置了自动加载database造成的,但是之前的版本用着都没问题呀,这个版本出这个问题,甚是奇怪。

今天在配置一个CodeIgniter 2.1.0时,遇到白屏,系统报500错误,但是Apache的错误日志中看不到任何错误信息输出。

经过简单的定位后,发现是由于在autoload中配置了自动加载database造成的,但是之前的版本用着都没问题呀,这个版本出这个问题,甚是奇怪。

系统的一些相关信息:

OS:Cent OS 5.4

Apache:2.2.4

PHP:5.2.17

Mysql:5.0.77

通过不断的die测试,定位到system/database/drivers/mysql/mysql_driver.php文件中,发现mysql的调用函数都用了@将错误信息隐藏了,难怪白屏,什么信息都没有。最后测试到,问题出在下面这个函数上:

   1:      function db_set_charset($charset, $collation)
   2:      {
   3:          if ( ! isset($this->use_set_names))
   4:          {
   5:              // mysql_set_charset() requires PHP >= 5.2.3 and MySQL >= 5.0.7, use SET NAMES as fallback
   6:              $this->use_set_names = (version_compare(PHP_VERSION, '5.2.3', '>=') && version_compare(mysql_get_server_info(), '5.0.7', '>=')) ? FALSE : TRUE;
   7:          }
   8:          
   9:          if( !function_exists('mysql_set_charset') ){
  10:              $this->use_set_names = TRUE;    //解决PHP MYSQL模块的BUG问题
  11:          }
  12:   
  13:          if ($this->use_set_names === TRUE)
  14:          {
  15:              return @mysql_query("SET NAMES '".$this->escape_str($charset)."' COLLATE '".$this->escape_str($collation)."'", $this->conn_id);
  16:          }
  17:          else
  18:          {
  19:              return @mysql_set_charset($charset, $this->conn_id);
  20:          }
  21:      }

在我这个版本的php中,不存在mysql_set_charset这个函数,但是判断的结果是需要这个函数,所以执行到这里的时候就发生错误了。

但是按照PHP的版本来说,这个函数应该是存在的,可能是编译的时候一些参数选择的问题造成了这个错误。

参考资料:

1、CodeIgniter Blank Page Fix: Blank webpage when setting up CodeIgniter, PHP, MySQL, and Apache

2、Mysql set charset

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
XML Oracle 关系型数据库
GeoTools之入门简介
GeoTools是一套开源的用java言语开发的GIS开发工具包,可以基于GeoTools开发符合标准的地理信息系统。GeoTools 提供了 OGC(Open Geospatial Consortium)规范的一个实现来作为他们的开发。
2119 0
GeoTools之入门简介
|
弹性计算 Windows
同步服务器时间NTP
在秒杀、抢券等高并发的活动中,一点点的时间延迟,也会让自己后悔莫及……
2017 0
同步服务器时间NTP
|
分布式计算 Java Hadoop
crontab环境变量问题
在crontab中运行脚本来查看hadoop相关信息,由于hadoop、java默认部署在/usr/local下面, 所以导致crontab执行时出现报错。具体与环境变量有关系,下文描述比较清楚。
1591 0
|
9月前
|
JavaScript 前端开发 异构计算
兼容移动手机的js拖拽插件Draggin.js
兼容移动手机的js拖拽插件Draggin.js
212 1
|
9月前
|
运维 安全 Cloud Native
阿里云云安全中心全面解析
阿里云云安全中心作为一款集持续监测、深度防御、全面分析、快速响应能力于一体的云上安全管理平台,为企业提供了全方位的安全保障。本文将详细介绍阿里云云安全中心的功能、应用场景、收费标准以及购买建议,帮助您更好地了解和利用这一强大的安全工具。
阿里云云安全中心全面解析
|
10月前
|
存储 算法 Linux
数据恢复软件恢复的数据打不开的原因与解决方法
数据恢复软件恢复的数据打不开的原因与解决方法
1851 10
|
11月前
|
边缘计算 5G vr&ar
|
分布式计算 Java Hadoop
|
存储
双通道的内存条是什么意思?底层原理是什么?
双通道的内存条是什么意思?底层原理是什么?
1135 0
|
网络协议 安全
内网接入外网的几种方式
内网接入外网的几种方式
1105 0