Доступ к базе данных Amazon RDS MySQL из CodeIgniter приводит к пустому отображению

Это связано с этот предыдущий вопрос. Я задаю новый вопрос, потому что на данный момент считаю, что это проблема доступа к базе данных.

По сути, из-за миграции сервера я переключил базу данных с сервера MySql на сервер Amazon RDS MySql. Подводя итог, я пытаюсь перенести сайт PHP на основе CodeIgniter (версия 1.7.2) на новый сервер с операционной системой AmazonLinux. Предыдущим сервером был Ubuntu, на котором работал PHP 5.3.3-1ubuntu9.5 на Apache2. Версия PHP на новом сервере AmazonLinux — 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, работающее на том же сервере, который может получить доступ к базе данных RDS, используя тот же URL-адрес, имя и пароль, поэтому это не является проблемой групп безопасности.

Есть мысли о том, в чем может быть проблема? и если да, то как решить?

Изменить 1: я разыскал проблему — не удивительно, что это драйвер базы данных. Сбой при вызове этой функции:
система / база данных / драйверы / mysqli / mysqli_driver.php: функция db_pconnect ()

Вопрос в том, могу ли я просто скопировать более свежий драйвер в эту более старую версию CodeIgnitor, и он будет чудесным образом работать? Я попробую этот эксперимент завтра. В противном случае мы могли бы посмотреть на обновление. Мрачно, но теоретически это должно сработать, поскольку у него будет обновленный драйвер. Правильно?

0

Решение

Проблема оказалась проблемой доступа к базе данных. В частности, оказалось, что версия PHP на новом сервере не поддерживает устаревшие вызовы API-интерфейсов php-mysql (например, @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 (как показано в phpinfo при вызове со страницы php на сервере httpd / apached) следующим образом:

а) измените «extension_dir», чтобы показать, где установлен mysql.so:

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

б) Затем добавьте следующие строки:

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
0

Другие решения

Разрешите порт 3306 на вашем сервере. Я буду возможен только когда у вас есть доступ к WHM. В противном случае свяжитесь с администратором вашего сервера.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector