Назад | Перейти на главную страницу

Расширение MySQL для PHP не работает

На сервере 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 () для загрузки файла. .