首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从CodeIgniter访问Amazon RDS MySQL数据库时会出现空白显示

从CodeIgniter访问Amazon RDS MySQL数据库时会出现空白显示
EN

Stack Overflow用户
提问于 2015-04-26 05:54:22
回答 2查看 2.2K关注 0票数 0

这与this previous question相关。我提出了一个新的问题,因为在这一点上,我认为这是一个数据库访问问题。

实际上,由于服务器迁移,我已经将数据库从MySql服务器切换到Amazon RDS MySql服务器。总之,我正在尝试将一个基于CodeIgniter (版本1.7.2)的PHP站点迁移到一个以AmazonLinux为操作系统的新服务器上。之前的服务器是Ubuntu,在Apache2上运行PHP5.3.3-1ubuntu9.5。新的AmazonLinux服务器上的PHP版本是5.3.29,运行在httpd上。

问题是,当我尝试访问新服务器中的URL时,我得到一个空白显示。代码在system/core/CodeIgniter.php中的以下行停止:

代码语言:javascript
复制
$CI = new $class();

应用程序日志的最后一行如下:

代码语言:javascript
复制
DEBUG - 2015-04-25 17:17:58 --> Database Driver Class Initialized

所以,它发生在数据库周围。我还读到,如果是由于数据库相关消息使用了"@“而导致的数据库问题,则会出现空白显示。

以下是database.php中的设置:

代码语言:javascript
复制
$active_group = "default";
$active_record = TRUE;
$db['default']['hostname'] = "xxxxx.xxxxxxxx.us-east-1.rds.amazonaws.com";
$db['default']['username'] = "xxxxx";
$db['default']['password'] = "xxxxx";
$db['default']['database'] = "xxxxx";
$db['default']['dbdriver'] = "mysql";
$db['default']['port'] = 3306;
$db['default']['dbprefix'] = "";
$db['default']['pconnect'] = TRUE;
$db['default']['db_debug'] = "TRUE";
// $db['default']['cache_on'] = FALSE;
$db['default']['cache_on'] = FALSE;
$db['default']['cachedir'] = "/opt/xxxxx/cachedb/";
$db['default']['char_set'] = "utf8";
$db['default']['dbcollat'] = "utf8_general_ci";

我还尝试了不指定端口(因为它是在当前生产站点上设置的)以及在url末尾指定的端口:

代码语言:javascript
复制
$db['default']['hostname'] = "xxxxx.xxxxxxxx.us-east-1.rds.amazonaws.com:3306";

但我还是看到空白的显示屏。

我们有一个运行在同一台服务器上的Java/Tomcat应用程序,它能够使用相同的url、名称和密码访问RDS数据库,所以这看起来不是安全组的问题。

有没有想过问题可能是什么?如果是这样,该如何解决呢?

编辑1:我已经追踪到了问题--毫不奇怪,问题出在数据库驱动上。调用此函数失败: system/database/drivers/mysqli/mysqli_driver.php:函数db_pconnect()

问题是,我是否可以将更新的驱动程序复制到这个旧版本的CodeIgnitor中,它就会奇迹般地工作?我明天就去做那个实验。否则,我们可能会考虑升级。严峻,但理论上它应该可以工作,因为它将有一个最新的驱动程序。对吗?

EN

回答 2

Stack Overflow用户

发布于 2015-04-27 22:17:02

问题最终被证明是一个数据库访问问题。具体地说,新服务器上的PHP版本不支持对php-mysql (例如@mysql_pconnect或@mysql_connect)的弃用调用。

解决方案是

1)下载支持遗留调用的mysql库。在AmazonLinux的情况下,这是按如下方式完成的:

代码语言:javascript
复制
sudo yum install php-mysql

2)查找从哪里下载的库,例如

代码语言:javascript
复制
find / -name mysql.so

这可能也显示在安装中,但这是一种随时找到它的方法。YMMV,但在我的例子中,库名是:

代码语言:javascript
复制
/usr/lib64/php-zts/modules/mysql.so

3)修改php.ini (从httpd/apached服务器的php页面调用,如phpinfo所示)如下:

a)修改"extension_dir“,显示mysql.so的安装位置:

代码语言:javascript
复制
extension_dir = "/usr/lib64/php-zts/modules" 

b)然后添加以下行:

代码语言:javascript
复制
extension=mysqli.so
extension=mysql.so
extension=pdo_mysql.so

重新启动apache,您就可以开始工作了。

注意:不支持的特定传统调用是我正在使用的CodeIgnitor版本的一部分,如下所示:

代码语言:javascript
复制
   return @mysql_pconnect($this->hostname, $this->username, $this-// etc. 

php错误日志显示以下错误:

代码语言:javascript
复制
 PHP Fatal error:  Call to undefined function mysql_connect() in xxx.php on line xx
票数 0
EN

Stack Overflow用户

发布于 2015-06-23 01:30:59

在您的服务器中允许3306端口。我将只可能当你有WHM访问。否则,请与您的服务器管理员联系。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29871162

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档