Главная страница IT-студия  
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создание сайтов. Авторы: Кузнецов М.В., Симдянов И.В. Головоломки на PHP для хакера (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры . Авторы: Кузнецов М.В., Симдянов И.В. PHP. Народные советы. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование: ступени карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP Security & Cracking Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
Консультации от известных специалистов и авторов многих книг

Информационный портал
«SoftTime-INFO»




| Работа с Apache | Подключение к PHP расширения для работы с MySQL

Подключение к PHP расширения для работы с MySQL

Автор: Голышев С.В. (glsv)
e-mail: glsv@yandex.ru

В данной статье приводится последовательность действия, которые необходимо выполнить для подключения к PHP расширения для работы с MySQL. Данная методика не зависит от используемых версий MySQL, PHP и Apache. Существующие отличия, в работе различных версий данных программ, как правило, указаны в примечаниях.

Процесс установки сервера Apache и подключения к нему PHP описывается в статьях:

По умолчанию, расширение для работы с MySQL (библиотека php_mysql.dll) не подключено к PHP и соответствующие функции недоступны. Для подключения библиотеки необходимо внести изменения в конфигурационный файл php.ini и скопировать дополнительные библиотеки в директорию c:/windows/system32.

1. Укажите PHP (Apache) где находится php.ini (только для Apache 2.x)

Если вы используете Apache версии 2 и выше, то обязательно добавьте в конфигурационный файл Apache (httpd.conf) директиву PHPIniDir, которая позволяет точно указать месторасположение файла php.ini. После добавления директивы перезагрузите Apache и удостоверьтесь, что запуск прошел успешно.

PHPIniDir “c:/php”

Примечание

Обратите внимание, что при записи пути используются прямые слеши /, что нехарактерно для Windows, в которой используются обратные слеши \\. Дело в том, что и Apache и PHP изначально были созданы для работы на unix-системах, где используются именно прямые слеши. Во избежание возможных трудно-диагностируемых проблем настоятельно рекомендуем использовать в конфигурационных файлах Apache и PHP прямые слеши в unix-формате.

Здесь подразумевается, что конфигурационный файл php.ini хранится в директории c:/php. Чтобы окончательно удостовериться, что Apache нашел конфигурационный файл php.ini выполните функцию phpinfo().

Вывод конфигурационной информации PHP

<?php
  
echo phpinfo();
?>

Найдите в полученных фиолетовых таблицах значение строки «Configuration File (php.ini) Path». В ней должен быть указан путь к используемому файлу php.ini, включая сам файл. Если в этой строке указана только директория, то это значит, что Apache не смог найти файл php.ini.

C:/php/php.ini            // Правильно – php.ini найден и используется
C:/windows/              // Неправильно – php.ini не обнаружен

Примечание

В Apache более ранних версий директивы PHPIniDir не было и вследствие этого возникало очень много ошибок, связанных с неправильным расположением файла php.ini. Для Apache версии 1.3 php.ini обязательно должен быть расположен в системной директории Windows, обычно: c:/Windows. Использование директивы PHPIniDir в Apache версии 2 позволяет кардинально решить данную проблему.

После того, как Вы удостоверились, что Apache использует правильный php.ini можно приступать к его редактированию для подключения расширения работы с MySQL.

2. Настройте в PHP.INI директиву extension_dir

Директива extension_dir указывает директорию, в которой располагаются библиотеки расширений php, в том числе и библиотека php_mysql.dll. Если вы установили php в директорию c:/php, то библиотеки расширений, как правило, располагаются в поддиректорию ext (c:/php/ext). Проверьте так ли это и установите правильное значение директивы extension_dir.

extension_dir = "c:/php/ext"

3. Подключите расширение для работы с MySQL

Для этого найдите в php.ini строчку:

;extension=php_mysql.dll

И снимите с нее символ комментария – точку с запятой.

extension=php_mysql.dll

4. Скопируйте дополнительную библиотеку libmysql.dll в c:/windows

Если PHP у Вас подключен к Apache в качестве модуля, то для подключения расширения MySQL необходимо скопировать дополнительную библиотеку libmysql.dll из директории c:/php в директорию c:/windows/system32. Если php подключен к Apache, как CGI-приложение, то копирования дополнительной библиотеки не требуется.

5. Перезагрузите Apache

Чтобы все внесенные изменения вступили в силу перезагрузите Apache.

6. Проверьте установку расширения

Чтобы удостовериться, что библиотека для работы с MySQL успешно подключилась к PHP выполните функцию phpinfo(). Просмотрите «фиолетовые таблицы» и найдите в них раздел с именем MySQL. Если такой раздел существует, то значит, что расширение успешно подключилось.

Проверка взаимодействия PHP c MySQL

1. Проверьте запущен ли у Вас сервер MySQL.

Перед тем, как приступить к проверке взаимодействия PHP c MySQL убедитесь, что сервер MySQL у Вас работает. Это можно сделать, открыв список служб Windows: «Пуск» | «Панель Управления» | «Администрирование» | «Службы». Найдите службу с именем MySQL и убедитесь, что она находится в состоянии работы (третий столбец таблицы).

Второй способ убедится, что сервер MySQL работает: нажмите кнопки «Crtl» + «Alt» + «Del» и на вкладке «Процессы» найдите процесс с именем mysqld.exe. Вместо процесса mysqld.exe также могут работать процессы: mysqld-nt.exe, mysqld-max-nt.exe, mysqld-debug.exe.

2. Выполните проверочный php-скрипт

PHP-скрипт, проверяющий взаимодействие PHP с сервером MySQL

<?php  
  $dblocation 
"127.0.0.1";  
  
$dbname "test";  
  
$dbuser "root";  
  
$dbpasswd "";  

  
$dbcnx mysql_connect($dblocation$dbuser$dbpasswd);  
  if (!
$dbcnx)  
  {  
    echo 
"<p>К сожалению, не доступен сервер mySQL</p>";  
    exit();  
  }  
  if (!
mysql_select_db($dbname,$dbcnx) )  
  {  
    echo 
"<p>К сожалению, не доступна база данных</p>";  
    exit();  
  }  
  
$ver mysql_query("SELECT VERSION()");  
  if(!
$ver)  
  {  
    echo 
"<p>Ошибка в запросе</p>";  
    exit();  
  }  
  echo 
mysql_result($ver0);  
?>

Если тест прошел успешно, то на экран будет выведен номер версии сервера MySQL. В противном случае, на экран будут выведены описания произошедших ошибок.

Ошибки при подключении расширения для работы с MySQL

Ошибки вида: Call to undefined function

Все ошибки содержащие фразу «Call to undefined function» указывают, на неподключенное расширение PHP. Если такие ошибки возникают при работы с фунциями MySQL, то это значит, что не подключена библиотека PHP для работы с MySQL – php_mysql.dll

Пример сообщения об ошибках:

Fatal error: Call to undefined function mysql_connect() 
in C:\www\panel\htdocs\test.php on line 7

Для решения этой проблемы обратитесь к началу статьи.

Нет блока MySQL в phpinfo()

Если все сделано правильно, но расширение для работы с MySQL не подключается и даже отсутствует блок MySQL в выводе функции phpinfo(), то проверьте версию библиотеки libmysql.dll, расположенную в c:/windows/system32.

  1. Сравните размер библиотеки libmysql.dll, которая находится в c:/windows/system32 с размером одноименной библиотеки, которая установилась вместе с PHP. Они должны быть равны.
  2. Проведите библиотеки libmysql.dll по директории c:/windows и всем поддиректориям. Удалите все найденные дубли и оставьте только одну нужную библиотеку – ту, которая была скопирована из директории c:/php.

Примечание

Одноименная библиотека libmysql.dll поставляется также вместе с сервером MySQL. Однако, это разные библиотеки и если в директории c:/windows/system32 будет лежать именно библиотека от MySQL, то PHP не сможет подключить расширение. Библиотека libmysql.dll может быть автоматически скопирована в c:/windows/system32 при установке сервера MySQL. Наличие в системной директории библиотека от старой версии PHP также может стать препятствием.

Чистая страница проверочного скрипта

В качестве скрипта для проверки взаимодействия PHP c MySQL на нашем сайте часто используется скрипт, приведенный в листинге ниже. Его отличия от аналогичного php-скрипта, приведенного в начале статьи, – символы @ перед вызовом функций mysql_connect() и mysql_select_db(). Эти символы используются для подавления вывода ошибок в браузер. Их полезно применять на работающем сайте в Интернете чтобы предотвратить вывод в браузер конфиденциальной информации, но при отладке скриптов запрет вывода ошибок не нужен, т.к. он может затруднить диагностику проблемы.

PHP-скрипт, проверяющий взаимодействие PHP с сервером MySQL

<?php  
  $dblocation 
"127.0.0.1";  
  
$dbname "test";  
  
$dbuser "root";  
  
$dbpasswd "";  

  
$dbcnx = @mysql_connect($dblocation$dbuser$dbpasswd);  
  if (!
$dbcnx)  
  {  
    echo 
"<p>К сожалению, не доступен сервер mySQL</p>";  
    exit();  
  }  
  if (!@
mysql_select_db($dbname,$dbcnx) )  
  {  
    echo 
"<p>К сожалению, не доступна база данных</p>";  
    exit();  
  }  
  
$ver mysql_query("SELECT VERSION()");  
  if(!
$ver)  
  {  
    echo 
"<p>Ошибка в запросе</p>";  
    exit();  
  }  
  echo 
mysql_result($ver0);  
?>

Если в результате выполнения данного скрипта выводится чистая страница, то, как правило, это значит, что к PHP не подключена библиотека php_mysql.dll. Чтобы более точно диагностировать проблему проведите следующую последовательность действий.

  1. Убедитесь, что выполняются другие PHP-скрипты, не использующие базу данных MySQL.
  2. Уберите символ @ перед вызовом функции mysql_connect и mysql_select, который используется для подавления вывода ошибок в браузер. После этого в браузер будет выдана более полная информация об ошибках, что поможет решению проблемы.

Ошибка: Can't connect to MySQL server on '127.0.0.1' (10061)

Если при выполнении проверочного php-скрипта выдается ошибка подобная следующей:

Warning: mysql_connect() [function.mysql-connect]: 
Can't connect to MySQL server on '127.0.0.1' (10061) 
in C:\www\panel\htdocs\test.php on line 7

Это свидетельствует о том, что не работает сервер базы данных MySQL. Более точная диагностика этой проблемы приведена выше в пункте 1 подраздела «Проверка взаимодействия PHP c MySQL».

Ошибка: Access denied for user 'root'@'localhost' (using password: YES)

Наличие следующей ошибки:

Warning: mysql_connect() [function.mysql-connect]: 
Access denied for user 'root'@'localhost' (using password: YES) 
in C:\www\panel\htdocs\test.php on line 7

Свидетельствует о том, что Вы пытаетесь подключиться к базе данных MySQL c неправильным паролем. Проверьте значение переменной $dbpasswd в проверочном скрипте. По умолчанию сервер MySQL устанавливается с пустым паролем пользователя root. Если Вы самостоятельно установили пользователю root пароль, то пропишите его в переменную $dbpasswd проверочного скрипта.

Любые возникающие вопросы по подключению к PHP расширения для работы с вы можете задать на нашем форуме посвященном установке и настройке Apache, PHP и библиотек расширений http://www.softtime.ru/forum/index.php?id_forum=5 .

Русская версия English

 
  Rambler's Top100 Яндекс.Метрика Яндекс цитирования