PHP/Apache: PHP Неустранимая ошибка: вызов функции undefined mysql_connect()
У меня есть MySQL (5.5.23 Community Server), Apache (2.2) и PHP (5.3.13), работающий на компьютере Fedora 15 (64-разрядный). Каждый работает без проблем самостоятельно.
Я думал, что PHP настроен/скомпилирован для работы с MySQL, но когда я пытаюсь загрузить любую веб-страницу PHP, которая вызывает вызов MySQL, я получаю вышеупомянутую фатальную ошибку (в журнале ошибок Apache). PHP работает нормально, но через Apache и в командной строке.
Когда я запускаю php -i из командной строки, достаточно уверен, что он отображает все биты и части MySQL, но когда я загружаю страницу, отображающую phpinfo(), то не упомянуты модули MySQL.
Я также пробовал комментировать "extension = mysql.so" в php.ini, но PHP жалуется на "PHP Startup: не удается загрузить динамическую библиотеку '/usr/lib64/php/modules/mysql.so'."
(даже если модуль там находится). Но тогда я не совсем уверен, нужна ли эта строка для того, чтобы ее не прокомментировали или нет. [Коррекция: ошибка была указана из-за опечатки, но запуск из командной строки показывает, что модуль уже загружен в любом случае - там это предупреждение от PHP, которое так говорит.]
Я также отключил SELinux; многократно останавливал/перезапускал Apache; yummed MySQL-Devel, если это имеет значение; и, кажется, все другие возможные вещи.
Если я запустил небольшой PHP-тест script из командной строки, чтобы получить доступ к базе данных MySQL, то он работает без проблем, поэтому PHP знает о MySQL, но когда он работает под Apache, он, похоже, не имеет понятия что MySQL даже существует.
Я пытаюсь в течение нескольких месяцев пытаться решить эту проблему и, кажется, все пробовал, но ничего не работает.
Я не против переустанавливать PHP, если мне действительно нужно, если кто-то может продемонстрировать правильный способ настройки/компиляции с поддержкой MySQL, чтобы я мог заставить его работать под Apache, хотя в идеале я ' d просто предпочитают работать с существующей установкой.
Большое спасибо за любую помощь!
Ответы
Ответ 1
В случае, если кому-либо это грозит, это случай, когда PHP не имеет доступа к клиентским библиотекам mysql. Наличие сервера MySQL в системе не является правильным исправлением. Исправить для ubuntu (и PHP 5):
sudo apt-get install php5-mysql
После установки клиента веб-сервер необходимо перезапустить. Если вы используете apache, то должно работать следующее:
sudo service apache2 restart
Ответ 2
Имейте в виду, что с PHP 5.5.0 функция mysql_connect()
устарела, и она полностью удалена в PHP 7
Дополнительную информацию можно найти в документации php:
Цитата:
Внимание
Это расширение было устарело в PHP 5.5.0, и оно было удалено в PHP 7.0.0. Вместо этого следует использовать расширение MySQLi или PDO_MySQL. См. Также MySQL: выбирая руководство по API и связанные с ним FAQ для получения дополнительной информации. Альтернативы этой функции включают:
* mysqli_connect()
* PDO:: __ construct()
Ответ 3
У меня была такая же проблема, и мне пришлось обратиться к php manual, в котором говорилось, что mysql и mysqli extensions требуют загрузки libmysql.dll. Я искал его под C:\windows\system32 (windows 7) и не смог найти, поэтому я загрузил его здесь и поместил его в свой C:\Windows\system32. Я перезапустил Apache, и все сработало нормально. Принял меня 3 дня, чтобы понять, надеюсь, что это поможет.
Ответ 4
PHP-версия модуля Apache может по какой-то нечетной причине не собирать файл php.ini в качестве версии CLI, я бы предложил неплохо посмотреть на:
- Любые различия в файлах
.ini
, которые отличаются от php -i
и phpinfo()
через веб-страницу *
- Если нет различий, то для просмотра разрешений файлов
mysql.so
и .ini
, но я думаю, что Apache анализирует их как пользователя root
Чтобы быть действительно понятным здесь, не ищите файлы php.ini
в файловой системе, посмотрите, что говорит PHP, что он смотрит на
Ответ 5
Как Бут
sudo yum install php-mysql
или
sudo apt-get install php5-mysql
Ответ 6
Я получил подобное сообщение об ошибке. Думаю, я случайно набрал "9o" при начале первой строки файла php.ini. Как только я удалил это, я больше не получил сообщения о "фатальной ошибке". Надеюсь, это поможет.
Ответ 7
Deamon mysql
должен работать.
Если не попробовать это:
#/etc/init.d/mysql start
Или это:
#service mysqld start
И если вы хотите добавить mysql при загрузке:
# chkconfig --add mysqld
# chkconfig -- level 235 mysqld on
Если да, и он все еще не работает, попробуйте это:
Раскомментируйте следующие строки в /etc/php/php.ini
extension=mysqli.so
extension=mysql.so
И проверьте свой пост выше '/usr/lib64/php/modules/msql.so'. Он должен быть mysql.so (если он ошибочно игнорирует его...)