这与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中的以下行停止:
$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中,它就会奇迹般地工作?我明天就去做那个实验。否则,我们可能会考虑升级。严峻,但理论上它应该可以工作,因为它将有一个最新的驱动程序。对吗?
发布于 2015-04-27 22:17:02
问题最终被证明是一个数据库访问问题。具体地说,新服务器上的PHP版本不支持对php-mysql (例如@mysql_pconnect或@mysql_connect)的弃用调用。
解决方案是
1)下载支持遗留调用的mysql库。在AmazonLinux的情况下,这是按如下方式完成的:
sudo yum install php-mysql2)查找从哪里下载的库,例如
find / -name mysql.so这可能也显示在安装中,但这是一种随时找到它的方法。YMMV,但在我的例子中,库名是:
/usr/lib64/php-zts/modules/mysql.so3)修改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发布于 2015-06-23 01:30:59
在您的服务器中允许3306端口。我将只可能当你有WHM访问。否则,请与您的服务器管理员联系。
https://stackoverflow.com/questions/29871162
复制相似问题