На сервере Debian и после установки и удаления SquirrelMail (с некоторым понижением и обновлением php5, mysql ...) расширение MySQL для PHP перестало работать.
У меня установлен php5-mysql, и когда я пытаюсь подключиться к базе данных через php-cli, я подключаюсь успешно, но когда я пытаюсь подключиться из Интернета, обслуживаемого Apache, я не могу подключиться.
Этот скрипт, запускаемый php5-cli:
echo phpinfo();
$link = mysql_connect('localhost', 'user, 'password');
if (!$link) {
die('Could not connect: ' . mysql_error());
}
echo 'Connected successfully';
mysql_close($link);
Печатает phpinfo, который включает «/etc/php5/cli/conf.d/mysql.ini», а также раздел MySQL со всей конфигурацией: SOCKET, LIBS ... И затем он печатает «Connectes Успешно».
Но при запуске apache, к которому обращается веб-браузер, он отображает phpinfo, который включает "/etc/php5/apache2/conf.d/mysql.ini", но в нем отсутствует раздел MySQL, и сценарий умирает с выводом "Неустранимая ошибка: Вызов неопределенной функции mysql_connect () ".
Обратите внимание, что и «/etc/php5/cli/conf.d/mysql.ini», и «/etc/php5/apache2/conf.d/mysql.ini» на самом деле являются одной и той же конфигурацией, потому что в Debian структура :
/etc/php5/apache2
/etc/php5/cgi
/etc/php5/cli
/etc/php5/conf.d
И оба указывают на один и тот же каталог:
/etc/php5/apache2/conf.d -> ../conf.d
/etc/php5/cli -> ../conf.d
Где /etc/php5/conf.d/mysql.ini состоит из одной строки:
extension=mysql.so
Итак, мой вопрос: почему расширение MySQL для PHP не работает, если у меня есть конфигурация, включенная точно так же, как и в php-cli, который работает?
Большое спасибо!
Вероятно, это не проблема конфигурации. Я не знаком с тем, как это делается в Debian (в отношении обновления / понижения версии PHP), но похоже, что PHP, используемый Apache, и PHP CLI на самом деле используют разные PHP.
Вы можете проверить это, выполнив phpinfo()
из браузера и php -i
в командной строке. Если Apache и CLI используют один и тот же PHP, результаты должны быть точно такими же (одинаковые параметры настройки, время компиляции, включены библиотеки и т. Д.).
Предполагая, что PHP веб-сервера работает как mod_php, две наиболее вероятные причины:
1) разрешения для файла php.ini или файла .so не разрешают uid веб-сервера доступ к файлу (ам)
2) на веб-сервере работает chroot
Вы можете легко проверить это из PHP, используя is_readable, и в случае php.ini используйте file_get_contents (), чтобы проверить, что файл содержит то, что вы ожидаете, а в случае mysql.so используйте dl () для загрузки файла. .