繁体   English   中英

从CodeIgniter访问Amazon RDS MySQL数据库导致空白显示

[英]Accessing an Amazon RDS MySQL database from CodeIgniter leads a blank display

这与先前的问题有关 我提出了一个新问题,因为在这一点上,我认为这是一个数据库访问问题。

本质上,由于服务器迁移,我已将数据库从MySql服务器切换到Amazon RDS MySql服务器。 总而言之,我正在尝试将基于CodeIgniter(版本1.7.2)的PHP站点迁移到以AmazonLinux作为OS的新服务器。 以前的服务器是Ubuntu,在Apache2上运行PHP 5.3.3-1ubuntu9.5。 新的AmazonLinux服务器上的PHP版本是5.3.29,在httpd上运行。

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

$CI = new $class();

应用程序日志的最后一行是这样的:

DEBUG - 2015-04-25 17:17:58 --> Database Driver Class Initialized

因此,它正在数据库周围发生。 我还读到如果由于数据库相关消息使用“ @”导致数据库问题,则会显示空白。

这些是database.php中的设置:

$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末尾指定的端口的情况:

$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中,它会奇迹般地工作吗? 我明天尝试那个实验。 否则,我们可能正在考虑升级。 严峻,但从理论上讲应该可以使用,因为它将具有最新的驱动程序。 对?

问题原来是数据库访问问题。 具体来说,新服务器上的PHP版本原来不支持不推荐使用的php-mysql API调用(例如@mysql_pconnect或@mysql_connect)

解决的办法是

1)下载支持旧版调用的mysql库。 对于AmazonLinux,这可以通过以下方式完成:

sudo yum install php-mysql

2)查找库的下载位置,例如

find / -name mysql.so

安装中可能也已经显示了此信息,但这是随时查找它的一种方式。 YMMV,但就我而言,库名是:

/usr/lib64/php-zts/modules/mysql.so

3)如下所示更改php.ini(如从httpd / apached服务器上的php页面调用时在phpinfo中所示):

a)更改“ extension_dir”以显示mysql.so的安装位置:

extension_dir = "/usr/lib64/php-zts/modules" 

b)然后添加以下行:

extension=mysqli.so
extension=mysql.so
extension=pdo_mysql.so

重新启动apache,您应该一切顺利。

注意:我正在使用的CodeIgnitor版本的一部分不支持特定的旧式调用,它是:

   return @mysql_pconnect($this->hostname, $this->username, $this-// etc. 

php错误日志显示此错误:

 PHP Fatal error:  Call to undefined function mysql_connect() in xxx.php on line xx

在服务器中允许3306端口。 仅当您具有WHM访问权限时,我才有可能。 否则,请与您的服务器管理员联系。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM