Ігор Гузей

Це не точна і остаточна інструкція до дії, яка використовує правильні терміни та оптимальні варіанти. Це радше лог поточної проблеми.

Завдання: Додати в PHP підтримку/модуль GD2

Як завжди, починаємо тренуватися на локальному комп'ютері, а він, звичайно, працює під віндами. Точніше Windows XP SP2. Далі підключимо GD2 у PHP, налаштованому через порти або зібраним вручну під FreeBSD.

Підключення GD2 до PHP під Windows

Знаходимо у дистрибутиві:
\php-4.3.9-Win32.zip\php-4.3.9-Win32\extensions\
бібліотеку php_gd2.dll, тобто. Версія 2.
і копіюємо php_gd2.dll в c:\windows
у файлі c:\windows\php.ini знаходимо рядок extension=php_gd2.dll та прибираємо коментар.
Перевантажуємо Апач. Всі.

Якщо наївним чином спочатку прибрати у php.ini коментар і думати, що цього достатньо, то після перезавантаження Апача з'явиться діагностика:
"Unable to load dynamic library "./php_gd.dll" - Вказаний модуль не знайдено."

Підключення GD2 до PHP під FreeBSD

PHP вже інстальовано з портів

Точніше не тільки PHP, а взагалі все (php, MySQL, Apache, ...) було налаштовано за допомогою портів.

# cd /usr/ports/lang/php4-extensions # make config додаємо галочку: "GD library support" # make deinstall # make reinstall # apachectl -k graceful м'який перезапуск або # apachectl restart грубий перезапуск

PHP зібраний вручну

У цьому випадку потрібна попередня робота з підготовки JPEG та ZLIB

Налаштування підтримки JPEG

Можливі варіанти

JPEG із порту
# cd /usr/ports/graphics/jpeg # make отримали директорію work/jpeg-6b не робити make install
JPEG з дистрибутива
# cd /usr/dist/ # wget ftp://ftp.uu.net/graphics/jpeg/jpegsrc.v6b.tar.gz # gunzip -c jpegsrc.v6b.tar.gz | tar xf - # cd /usr/dist/jpeg-6b # ./configure # make

Потрібно встановити підтримку zlib

З порту
# cd /usr/ports/archivers/php4-zlib # make Libraries have been installed in: /usr/ports/archivers/php4-zlib/work/php-4.4.4/ext/zlib/modules

Збираємо PHP

# cd /usr/dist/php-4.4.4 # ./configure --with-mysql --with-apache=/usr/dist/apache_1.3.37 --enable-memory-limit --with-gd без вказівки директорії встановлюється вбудована в PHP бібліотека GD. --with-jpeg-dir=/usr/ports/graphics/jpeg/work/jpeg-6b , якщо jpeg з порту або /usr/dist/jpeg-6b , якщо jpeg з дистрибутива --with-zlib-dir=/ usr/ports/archivers/php4-zlib/work/php-4.4.4/ext/zlib/modules # make install && make clean

Тестування

gif.php:png.phpjpg.php:gd_info.php:
KEY VAL$val) echo "
$key $val"; ?>



Пройдені помилки

При установці бібліотеки JPEG після "make" була зроблена команда "make install" з розрахунком, що нові файли ляжуть у /usr/local і потім автоматично будуть там знайдені

# ./configure --with-mysql --with-apache=/usr/dist/apache_1.3.37 --enable-memory-limit --with-gd --with-jpeg-dir --with-zlib-dir= /usr/ports/archivers/php4-zlib/work/php-4.4.4/ext/zlib/modules

Але чомусь JPEG не підключився. Не було жодної негативної діагностики та немає результату.

По дурості я тикав як сліпе кошеня намагаючись поставити то так, то так. То через все вбудоване, то через скачене, то з портів. Все це неподобство супроводжувалося зайвими інсталяціями, від чого сталися накладки, через які в момент інсталяції PHP були помилки:

# ./configure --with-mysql --with-apache=/usr/dist/apache_1.3.37 --enable-memory-limit --with-gd=/usr/local Зміна для використання PHP. # make install /usr/dist/php-4.4.4/ext/gd/gd.c:1151: undefined reference to `gdImageRotate" при цьому як директорія для GD вказується, але діагностика посилається на вбудовану директорію. # ./configure - -with-mysql --with-apache=/usr/dist/apache_1.3.37 --enable-memory-limit --with-gd=/usr/local --with-jpeg-dir=/usr/local --with -png-dir=/usr/local --with-zlib-dir=/usr/ports/archivers/php4-zlib/work/php-4.4.4/ext/zlib/modules Змінити ваше використання PHP # make install ... /usr/dist/php-4.4.4/ext/gd/gd.c:837: undefined reference to `gdImageColorMatch" /usr/dist/php-4.4.4/ext/gd/gd.c:1151 : undefined reference to `gdImageRotate" *** Error code 1

Спроба підготувати всі модулі окремо та точно вказати на них.

Пара очок...

У PHP немає вбудованої інфраструктури імпорту, такої як python, java або .net. Існує кілька способів використання бібліотек у PHP.

    скомпілювати їх у двійковий файл PHP. Це найпросунутіший спосіб, і зазвичай це не бажано, якщо у вас немає особливих потреб.

    Встановіть їх як модулі PHP на сервері та увімкніть їх у PHP.ini. З погляду програміста PHP ці розширення є частиною PHP – завжди доступні. Це просто простіше додавати та видаляти, не перебудовуючи сам PHP.

    Встановіть PHP-код на сервері де-небудь і увімкніть його у свій PHP script.

    Збережіть копію бібліотеки у свій проект та увімкніть її у свій PHP script.

Сторінка На базовому рівні код є частиною інтерпретатора (статичного або динамічного), або це простий старий PHP-код, який включає() ed у ваш проект.

У ваших цілях я можу лише запропонувати вам дотримуватись стандартного дистрибутива PHP (вибрати хорошу ОС Linux та використовувати його PHP). Тоді майже всі бібліотеки, які вам знадобляться на рівні інтерпретатора, доступні як додаткові пакети, і складність цього залишається за тими, хто це робить щодня.

У RedHat/Centos ви можете запустити:

yum install php php-memcached php-gd php-pecl

Сторінка Що стосується всіх інших бібліотек, які ви, можливо, захочете використовувати, швидше за все, найкраще використовувати хорошу фреймворк PHP, яка дбатиме про все це для вас.

Деякі приклади:

  • Zend Framework
  • CakePHP
  • Codeigniter
  • Etc...

(не в будь-якому порядку, тільки ті, які спадають на думку)

За умови, що ви використовували стандартний підхід використання RPM або аналогічний для керування скомпільованими в аспектах PHP та розширень, тоді хороша надійна структура подбає про включення всього вашого додаткового коду бібліотеки PHP, який вам потрібен.

У чому полягає кінцевий результат: ви зосереджені на доставці продукту, а не на всю інфраструктуру, яку вам інакше довелося б вивчати та винаходити.

Сторінка php.ini аналізується та запускається при запуску PHP (кожен раз для командного рядка, один раз на сервер запускається в apache). Він визначає безліч налаштувань, включає безліч модулів, налаштовує ці модулі і т.д.

Фактично можна перевизначити деякі параметри в php.ini за допомогою функції ini_set() в PHP. Однак це лише для деяких налаштувань. Інші мають бути встановлені до запуску script.

Під час роботи під apache ви можете додавати рядки до директиви.htaccess і які повністю перевизначають PHP.ini для цього каталогу/віртуального хоста.

(Будь ласка, виправте мій синтаксис і видаліть цю нотатку, якщо це не так)

ServerName www.example.com DocumentRoot /home/joe/site/docroot php_value include_path "/home/joe/site/php-code"

Сторінка У відповідь на ваше запитання № 6 про вашу власну бібліотеку та найкращий спосіб його упаковки я пропоную вам спочатку оцінити необхідність бібліотеки. І якщо ви справді щось робите, дізнайтеся найпоширеніший спосіб, яким люди це роблять. Якщо це проста бібліотека, достатньо файлу.php з хорошим веб-сайтом.

Сторінка Можливо, трохи безладно, але я сподіваюся, що це вкаже вам у правильному напрямку.

Пропоную трохи поговорити про мову програмування PHP, а саме торкнутися теми розширення CURL, тобто. можливість взаємодіяти з різними серверами за різними протоколами із самого скрипта PHP.

Перед тим як приступити до розгляду curl хочу нагадати, що мову PHP ми з Вами вже зачіпали, наприклад, у матеріалі про вивантаження в Excel на PHP або можливість автентифікації на PHP, а тепер поговоримо про можливість посилати запити на PHP.

Що таке CURL?

CURL– це бібліотека функцій PHP, за допомогою якої можна надсилати запити, наприклад, HTTP, із PHP скрипту. CURL підтримує такі протоколи як HTTP, HTTPS, FTP та інші. Надсилати HTTP запити можна методами GET, POST, PUT.

CURL може стати в нагоді у випадках коли необхідно викликати віддалений скрипт і отримати результат або просто зберегти HTML код сторінки, що викликається, загалом кожен може знайти своє застосування але сенс один це те що можна послати запити в процесі виконання скрипту.

Підключення бібліотеки CURL до PHP

Для того щоб використовувати бібліотеку CURL, її відповідно потрібно підключити.

Примітка! Як приклад ми будемо використовувати PHP 5.4.39 на Windows 7, а як Web-сервер у нас буде виступати Apache 2.2.22.

Перше, що потрібно зробити, це скопіювати бібліотеки. ssleay32.dll, libeay32.dll, libssh2.dllвони розташовані в директорії з PHP, в системний каталог Windows, а саме C:\Windows\System32.

Потім php.ini підключити бібліотеку php_curl.dll, тобто. розкоментувати наступний рядок

Бібліотека не підключена

;extension=php_curl.dll

Бібліотека підключена

Extension=php_curl.dll

Все, перезапускаємо Apache, викликаємо функцію phpinfo() і у разі успішного підключення у Вас має з'явитися розділ curl


Якщо його немає, це означає тільки одне, що бібліотека не завантажилася, найпоширеніша причина цього не були скопійовані вищеперелічені DLL в системний каталог Windows.

Приклад CURL – запитуємо дистанційну сторінку для виведення на екран

У цьому прикладі ми просто запитаємо віддалену сторінку за протоколом HTTP методом GET і виведемо її на екран.

У нас є каталог test в ньому 2 PHP файлів це test_curl.php і test.php, де test_curl.php і є скрипт де ми будемо використовувати curl, а test.php віддалений скрипт який ми будемо викликати. Код я докладно прокоментував.

Код test_curl.php

Код test.php

Заголовок 1"; break; case 2: echo "<Н2>Заголовок 2"; break; case 3: echo "<Н3>Заголовок 3"; break; )) ?>

У результаті, якщо ви запустите test_curl.php у Вас виведеться на екран напис «Заголовок 1», можете поекспериментувати з передачею параметрів id ( у цьому випадку 2 або 3).

Приклад CURL – викликаємо віддалений скрипт та отримуємо результат

Зараз давайте спробуємо викликати скрипт і отримати результат, щоб потім його обробити, для прикладу давайте використовувати метод POST. Назви файлів залишимо такими самими.

Код test_curl.php

Код test.php

І якщо ми запустимо test_curl.php, то на екран у нас виведеться 111, тобто. 1.11 отримане внаслідок звернення до віддаленого скрипту, помножене на 100.

А тепер давайте поговоримо про функції та константи до них.

Часто використовувані функції CURL та константи

  • curl_init – ініціалізує сеанс;
  • curl_close – Завершує сеанс;
  • curl_exec - Виконує запит;
  • curl_errno - повертає код помилки;
  • curl_setopt - Встановлює параметр для сеансу, наприклад:
    • CURLOPT_HEADER – значення 1 означає, що потрібно повернути заголовки;
    • CURLOPT_INFILESIZE — параметр для вказівки на очікуваний розмір файлу;
    • CURLOPT_VERBOSE — значення 1 означає, що CURL буде виводити докладні повідомлення про всі операції;
    • CURLOPT_NOPROGRESS – відключення індикатора прогресу операції значення 1;
    • CURLOPT_NOBODY – якщо Вам не потрібен документ, а потрібні лише заголовки, поставте значення 1;
    • CURLOPT_UPLOAD - для завантаження файлу на сервер;
    • CURLOPT_POST - Виконати запит методом POST;
    • CURLOPT_FTPLISTONLY – отримання списку файлів у директорії FTP сервера, значення 1;
    • CURLOPT_PUT - Виконати запит методом PUT, значення 1;
    • CURLOPT_RETURNTRANSFER — повернути результат, не виводячи до браузера, значення 1;
    • CURLOPT_TIMEOUT – максимальний час виконання за секунди;
    • CURLOPT_URL – вказівка ​​адреси для звернення;
    • CURLOPT_USERPWD - рядок з ім'ям користувача та паролем у вигляді:;
    • CURLOPT_POSTFIELDS – дані для запиту POST;
    • CURLOPT_REFERER - задає значення HTTP заголовка "Referer:";
    • CURLOPT_USERAGENT - задає значення HTTP заголовка «User-Agent:»;
    • CURLOPT_COOKIE — вміст заголовка "Cookie:", який буде надіслано з HTTP запитом;
    • CURLOPT_SSLCERT - ім'я файлу із сертифікатом у форматі PEM;
    • CURLOPT_SSL_VERIFYPEER – значення 0, щоб заборонити перевірку сертифіката віддаленого сервера (за замовчуванням 1);
    • CURLOPT_SSLCERTPASSWD – пароль до файлу сертифіката.
  • curl_getinfo - Повертає інформацію про операцію, другим параметром може бути константа для вказівки, що саме потрібно показати, наприклад:
    • CURLINFO_EFFECTIVE_URL - останній використаний URL;
    • CURLINFO_HTTP_CODE - останній отриманий код HTTP;
    • CURLINFO_FILETIME - дата модифікації завантаженого документа;
    • CURLINFO_TOTAL_TIME - час виконання операції за секунди;
    • CURLINFO_NAMELOOKUP_TIME - час дозволу імені сервера в секундах;
    • CURLINFO_CONNECT_TIME - час, витрачений на встановлення з'єднання, в секундах;
    • CURLINFO_PRETRANSFER_TIME - час, що минув від початку операції до готовності до фактичної передачі даних, в секундах;
    • CURLINFO_STARTTRANSFER_TIME - час, що минув від початку операції до моменту передачі першого байта даних, в секундах;
    • CURLINFO_REDIRECT_TIME - час, витрачений на перенаправлення, в секундах;
    • CURLINFO_SIZE_UPLOAD - кількість байт при закачуванні;
    • CURLINFO_SIZE_DOWNLOAD - кількість байт при завантаженні;
    • CURLINFO_SPEED_DOWNLOAD - середня швидкість закачування;
    • CURLINFO_SPEED_UPLOAD - середня швидкість завантаження;
    • CURLINFO_HEADER_SIZE - сумарний розмір всіх отриманих заголовків;
    • CURLINFO_REQUEST_SIZE - сумарний розмір усіх надісланих запитів;
    • CURLINFO_SSL_VERIFYRESULT — результат перевірки SSL сертифіката, запрошеної за допомогою установки CURLOPT_SSL_VERIFYPEER;
    • CURLINFO_CONTENT_LENGTH_DOWNLOAD - розмір завантаженого документа, прочитаний із заголовка Content-Length;
    • CURLINFO_CONTENT_LENGTH_UPLOAD - розмір даних, що закачуються;
    • CURLINFO_CONTENT_TYPE — вміст отриманого заголовка Content-type, або NULL, якщо цей заголовок не був отриманий.

Докладніше про функції CURL та константи до них можете переглянути на офіційному сайті PHP.

Нотатка:активовано адаптивну версію сайту, яка автоматично підлаштовується під невеликий розмір Вашого браузера та приховує деякі деталі сайту для зручності читання. Приємного перегляду!

Доброї доби всім читачам блогу Site on! Останні 2 місяці моя робота на компанію тісно пов'язана з чистим PHP (на використання фреймворків та CMS - табу), вже забув що таке Joomla:) тому, як ніколи доречно буде продовжити писати і вище.

Сьогодні ми поговоримо про те, як влаштовано підключення файлів до PHP. Як ви могли помітити, будь-який движок для сайту (Joomla, Wordpress, OpenCart, DLE і все, все, все) складається з тисяч.php (і не тільки php) файлів і всі вони взаємодіють між собою, що власне, і утворює механізм роботи сайту.

А тепер забудьте про двигуни та уявіть собі інший приклад: у нас є безліч сторінок на сайті, у кожному з них однакове меню, шапка сайту та підвал. Природно, ми не буде копіювати те саме з файлу в файл, інакше це б вийшов стародавній HTML-сайт зразка 90-х. Як мінімум, ми розіб'ємо все на 4 файли:

  • index.php – основна частина сторінки, цей файл змінюватиметься
  • menu.php – меню сайту
  • header.php – шапка сайту
  • footer.php – підвал сайту

Крім головної сторінки (index.php) у нас, наприклад, ще можуть бути сторінки з переліком товарів (category.php) та сторінки самих товарів (product.php). До цих сторінок зручно підключатиме файли menu.php, header.php, footer.php. Завдяки такому підходу у випадку, якщо у нас додатися новий пункт меню, ми додамо його всього один раз (у menu.php), а не 3 рази (в index.php, product.php, category.php).

Отже, виникає питання: "Як до PHP приєднати файл?". Для цих цілей у PHP існує 2 інструкції:

І їх похідні:

Звертаю вашу увагу на те, що include та require – це не функції, це так звані мовні конструкції, тому дужки не потрібні.

У чому різниця include та require

includeі require– це абсолютно одне й теж, з однією тільки різницею, що при помилці (наприклад, якщо вказаного файлу не існує та його неможливо підключити) include видасть помилку типу WarningПісля цього сайт продовжить роботу, а require при цьому видасть , яка повністю зупинить подальше завантаження сторінки.

Тобто інструкція require – радикальніша і жорсткіша. Що краще використовувати - вирішувати вам, за великим рахунком, рекомендують завжди вибирати більш строгий варіант, тобто require, але особисто мені слово include приємніше друкувати:)

include_once і require_once - роблять теж, що і include (підключають файл), але при цьому вони стежать, щоб кожен файл був підключений не більше одного разу. Їх особливо зручно використовувати, якщо над проектом працюють кілька людей і вам потрібно простежити, щоб файл не додали кілька разів.

Увага:

include_onceі require_once– працюють повільніше та споживають більше оперативної пам'яті, ніж include та require. Це логічно і пов'язано з тим, що їм доводиться запам'ятовувати всі файли, які були підключені і щоразу під час підключення перевіряти: чи не був цей файл вже підключений.

Давайте я наочно проілюструю як працює підключення файлів у PHP:

При підключенні файлів (будь-яких, наприклад: html, txt, php, xml і т.д.) PHP скрипт їх вміст тупо вставляється на місце include. Тобто include (а також я маю на увазі require, тому що це одне і те ж) - це все одно, що ви скопіювали звідкись код (CTRL + C) і вставили (CTRL + V) у файл (наприклад, в product. php), а потім зберегли і запустили як завжди: http://ваш_сайт.net/product.php

Для того щоб розрізняти основні файли, такі як product.php від тих, які ми до нього підключаємо (menu.php, header.php, footer.php), файли, що підключаються, перейменовують так: menu.inc.php, header.inc.php , footer.inc.php. Завдяки цьому, коли ми зайдемо в папку, ми одразу побачимо де основні файли, а де допоміжні.

Увага:

Цей прийом (дописувати inc) використовується лише для візуальної зручності і жодних функціональних відмінностей у собі не несе. Але візуальна зручність теж дуже важлива, тому намагайтеся все і завжди структурувати та робити в одному стилі.

include з поверненням значення

Пам'ятаєте ключове слово? Так ось у PHP є така дика річ, як return усередині include. Я ніколи не користувався цим і ніколи не бачив, щоб це використовували інші, але така можливість є, тримайте приклад some.php:

Підключаємо some.php:

// Виводить рядок: PHP ?>

Ще трохи фактів

  • Підключати файли можна в будь-якому місці PHP коду, у тому числі і всередині;
  • Підключення (include) спрацьовує під час виконання скрипту, заздалегідь у файлах, що підключаються, нічого не відбувається;
  • Підключений файл має ту ж , що має рядок, де оголошено include. Тобто якщо десь серед файлу, то глобальну область видимості, а якщо всередині функції, то локальну. Ще раз підкреслю, що include це теж саме, якби ви взяли та скопіювали код у файл на місце include.

Дякуємо всім за увагу та відмінних вихідних!

За промовчанням розширення для роботи з 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

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 з MySQL

1. Перевірте, чи у Вас сервер MySQL.

Перед тим, як розпочати перевірку взаємодії PHP з MySQL, переконайтеся, що сервер MySQL у Вас працює. Це можна зробити, відкривши список служб Windows: "Пуск" | "Панель Управління" | "Адміністрація" | "Служби". Знайдіть службу з ім'ям MySQL і переконайтеся, що вона перебуває в стані роботи (третій стовпець таблиці).

Другий спосіб переконається, що сервер MySQL працює: натисніть кнопки "Crtl" + "Alt" + "Del" і на вкладці "Процеси" знайдіть процес з ім'ям mysqld.exe. Замість процесу mysqld.exe можуть працювати процеси: mysqld-nt.exe, mysqld-max-nt.exe, mysqld-debug.exe.

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

$dblocation = "127.0.0.1";
$ dbname = " test " ;
$dbuser = "root";
$dbpasswd = "";

$dbcnx = mysql_connect ($dblocation, $dbuser, $dbpasswd);
if (! $ dbcnx )
{
echo "" ;
exit();
}
if (!

{
echo "" ;
exit();
}

if(! $ver )
{
echo "

Помилка у запиті

" ;
exit();
}
echo
mysql_result ($ver, 0);
?>

Якщо тест пройшов успішно, на екран буде виведено номер версії MySQL. В іншому випадку, на екран будуть виведені описи помилок, що відбулися.

Помилки при підключенні розширення для роботи з MySQL

Помилки: Call to undefined function

Всі помилки, що містять фразу "Call to undefined function" вказують на непідключене розширення PHP. Якщо такі помилки виникають під час роботи з функціями MySQL, це означає, що не підключена бібліотека PHP для роботи з MySQL – php_mysql.dll

Приклад повідомлення про помилки:

Fatal error: Call до undefined function mysql_connect()

Щоб вирішити цю проблему, зверніться до початку статті.

Немає блоку 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 з MySQL на нашому сайті часто використовується скрипт, наведений у лістингу нижче. Його відмінності від аналогічного php-скрипту, наведеного на початку статті, – символи @ перед викликом функцій mysql_connect() та mysql_select_db(). Ці символи використовуються для придушення помилок у браузер. Їх корисно використовувати на працюючому веб-сайті в Інтернеті щоб запобігти виведенню в браузер конфіденційної інформації, але при налагодженні скриптів заборона виведення помилок не потрібна, т.к. він може утруднити діагностику проблеми.

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

$dblocation = "127.0.0.1";
$ dbname = " test " ;
$dbuser = "root";
$dbpasswd = "";

$dbcnx = @ mysql_connect ($dblocation, $dbuser, $dbpasswd);
if (! $ dbcnx )
{
echo "

На жаль, недоступний сервер mySQL

" ;
exit();
}
if (! @
mysql_select_db ($dbname, $dbcnx))
{
echo "

На жаль, не доступна база даних

"
;
exit();
}
$ver = mysql_query ("SELECT VERSION()");
if(! $ver )
{
echo "

Помилка у запиті

"
;
exit();
}
echo
mysql_result ($ver, 0);
?>

Якщо в результаті виконання цього скрипта виводиться чиста сторінка, то, як правило, це означає, що до 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-скрипту видається подібна помилка такою:


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 з MySQL».

Помилка: Access denied for user "root"@"localhost" (using password: YES)

Наявність наступної помилки:

Warning: mysql_connect() :
Access denied for user "root"@"localhost" (using password: YES)
in C:\www\panel\htdocs\test.php on line 7

Свідчить про те, що Ви намагаєтесь підключитись до бази даних MySQL з неправильним паролем. Перевірте значення змінної $dbpasswd у перевірочному скрипті. За промовчанням сервер MySQL встановлюється з порожнім паролем користувача root. Якщо Ви самостійно встановили користувачеві root пароль, пропишіть його в змінну $dbpasswd перевірочного скрипта.

Будь-які питання по підключенню до PHP розширення для роботи з ви можете задати на нашому форумі присвяченому встановленню і налаштуванню Apache, PHP і бібліотек розширень .