Progress28.ru

IT Новости
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Mysqli extension for php

Mysqli extension for php

В данной статье приводится последовательность действия, которые необходимо выполнить для подключения к 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 и удостоверьтесь, что запуск прошел успешно.

Примечание

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

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

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

Найдите в полученных фиолетовых таблицах значение строки «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.

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

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

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

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

= «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 «

Ошибка в запросе

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

Читать еще:  Expose php off

Ошибки при подключении расширения для работы с 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:wwwpanelhtdocstest.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

= «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 «

Ошибка в запросе

Если в результате выполнения данного скрипта выводится чистая страница, то, как правило, это значит, что к 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:wwwpanelhtdocstest.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:wwwpanelhtdocstest.php on line 7

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

Mysqli extension for php

Расширение mysqli было представлено с версией PHP 5.0.0. MySQL Native Driver был включен в PHP версии 5.3.0.

Установка для Linux

Большинство дистрибутивов Unix включает бинарные версии PHP, которые в дальнейшем могут быть установлены. Несмотря на то, что бинарные версии, как правило, собраны с включенной поддержкой расширений MySQL, может потребоваться установка дополнительных пакетов с библиотеками расширений. Убедитесь, что менеджер пакетов, идущий с выбранным дистрибутивом, позволяет установить такие пакеты.

К примеру, на Ubuntu пакет php5-mysql устанавливает расширения ext/mysql, ext/mysqli, и pdo_mysql. На CentOS, пакет php-mysql так же их устанавливает.

Конечно, вы всегда можете собрать PHP из исходного кода. Сборка PHP из исходного кода позволяет выделить только те расширения MySQL (а также клиентские библиотеки для каждого из расширений), которые требуется использовать.

Рекомендуется использовать библиотеку MySQL Native Driver, в результате повышается производительность и имеется доступ к функциям, недоступным при использовании MySQL Client Library. См. Что такое MySQL Native Driver в PHP? для ознакомления с возможностями MySQL Native Driver.

Читать еще:  Php fopen кодировка

Под /path/to/mysql_config подразумевается расположение программы mysql_config, поставляемой вместе с MySQL Server.

Вспомогательная таблица времени компиляции mysqli

Версия PHPПо умолчаниюОпции настройки: mysqlndОпции настройки: libmysqlclientСписок изменений
5.4.x и вышеmysqlnd—with-mysqli—with-mysqli=/path/to/mysql_configпо умолчанию mysqlnd
5.3.xlibmysqlclient—with-mysqli=mysqlnd—with-mysqli=/path/to/mysql_configmysqlnd поддерживается
5.0.x, 5.1.x, 5.2.xlibmysqlclientНедоступно—with-mysqli=/path/to/mysql_configmysqlnd не поддерживается

Необходимо отметить, что существует возможность свободно перемешивать расширения MySQL и клиентские библиотеки. Например, можно активировать расширение MySQL, позволяющее использовать MySQL Client Library (libmysqlclient), и при этом настроить расширение mysqli для использования MySQL Native Driver. Таким образом, возможны любые перестановки расширений и клиентских библиотек.

Установка для Windows

Для Windows PHP в большинстве случаев устанавливается с помощью установщика.

PHP 5.3.0 и новее

В Windows для PHP версии 5.3 и выше, расширение mysqli разрешено и использует MySQL Native Driver по умолчанию. Это означает, что вам не нужно париться, настраивая доступ к libmysql.dll .

PHP 5.0, 5.1, 5.2

Для старых, неподдерживаемых версий PHP (PHP 5.2 не поддерживается с 6 января 2011 года), необходимо произвести настройку для включения расширения mysqli и определения используемой им клиентской библиотеки.

how to install mysqli extension for php7? #391

Comments

Copy link Quote reply

zjsxwc commented Mar 16, 2017 •

my container is from php:7.0-fpm

i started to run phpmyadmin, but got

i then checked the directoy

then i seach by apt-cache got nothing

how to install mysqli extension for php7?

This comment has been minimized.

Copy link Quote reply

estahn commented Mar 16, 2017

This comment has been minimized.

Copy link Quote reply

bommox commented Nov 23, 2017 •

You can easily add this to your Dockerfile
RUN docker-php-ext-install mysqli && docker-php-ext-enable mysqli

or docker run the image, and then install it from inside the container:

This comment has been minimized.

Copy link Quote reply

loooping commented Nov 27, 2018

You can easily add this to your Dockerfile
RUN docker-php-ext-install mysqli && docker-php-ext-enable mysqli

or docker run the image, and then install it from inside the container:

thank u so much

This comment has been minimized.

Copy link Quote reply

pmpintogil commented Mar 20, 2019

You can easily add this to your Dockerfile
RUN docker-php-ext-install mysqli && docker-php-ext-enable mysqli

or docker run the image, and then install it from inside the container:

Thankyou so much, that was a problem for some days.

This comment has been minimized.

Copy link Quote reply

boxboatjeremy commented Sep 20, 2019

I ran into this exact problem today and was able to update the Dockerfile by adding this line:

Unlike some of the comments above, I did not need to run the docker-php-ext-enable command.

This comment has been minimized.

Copy link Quote reply

Mr-Reca commented Oct 30, 2019

Hi, I’m having the same issue.

This is my Dockerfile

This is what I’m receiving:
Fatal error: Uncaught Error: Class ‘mysqli’ not found in /var/www/html/.

This comment has been minimized.

Copy link Quote reply

JoelLinn commented Oct 31, 2019

What is the workdir for? Try to move that after the last RUN or remove it.
Also what do you need mysql-client for in a php container?

This comment has been minimized.

Copy link Quote reply

Mr-Reca commented Oct 31, 2019

My PHP application connects to a MySQL Server. The program uses mysqli and some answers include the installation of those packages.

This comment has been minimized.

Copy link Quote reply

JoelLinn commented Oct 31, 2019

mysql-client is only needed for command line access to the database. Even if you want to do it you most probably want to do it from outside or another container.

This comment has been minimized.

Copy link Quote reply

Mr-Reca commented Oct 31, 2019

I’ve removed the WORKDIR and now it’s working.

This comment has been minimized.

Copy link Quote reply

sohmc commented Dec 13, 2019

These instructions were perfect but I’m having difficulty adding the necessary commands to my docker-compose file.

Each time the container is stopped and restarted, I have to manually execute the install. Is there a way to add it to a docker-compose.yml file? I tried adding:

But after doing so the container stops prematurely.

This comment has been minimized.

Copy link Quote reply

JoelLinn commented Dec 13, 2019

You need to create your own image with a Dockerfile based on ( FROM php:xy ) the version you want in which you install mysqli via RUN docker-php-ext-install . and reference that from your compose file. Restarting the apache of course stops the container, because apache is its main process — it is unneeded anyways in the Dockerfile

This comment has been minimized.

Copy link Quote reply

sohmc commented Dec 13, 2019

@JoelLinn thanks for the comment. It’s just odd because when I run apachectl restart from within the container, it doesn’t stop the container and everything works as normal. Hmm.

That being said, sounds like creating my own Dockerfile is the way to go.

This comment has been minimized.

Copy link Quote reply

yosifkit commented Dec 13, 2019

@sohmc, apachectl restart exits and so there is nothing for the container to track, so it also exits. (FYI, there is no init system in the container). You probably wanted something like this (just ending with the default entrypoint + command):

Building a Dockerfile would be better since you’ll most likely need other extensions and they may have apt dependencies that also need to be installed.

How to enable MySQLi extension on web-server

How to enable MySQLi? Before going to enable it on the server, I will share some ideas about MySQLi. Then, I should explain how we can enable MySQLi on a cpanel server and How we can check if MySQLi is already enabled or not in the server.

What is MySQLi?

Simply it’s a MySQL extension for PHP programming language. The MySQLi Extension (MySQL Improved) is a relational database driver used in the PHP programming language to provide an interface with MySQL databases.

The developers of the PHP programming language recommend using MySQLi when dealing with MySQL server versions 4.1.3 and newer (takes advantage of new functionality). The MySQLi extension has a lot of benefits, some of them are listed below:

  • An object-oriented interface
  • Support for prepared statements
  • Support for multiple statements
  • Support for transactions
  • Enhanced debugging support
  • Embedded server support
  • Powerful Functionality

How to check the MySQLi extension is enabled or not on server?

You can check the MySQLi extension from command line itself by executing the following command.

how to enable MySQLi extension on web-server with cPanel?

EasyApache 3

We can simply enable the MySQLi extension by rebuilding the web-server with Easyapache script. It is very simple, just run the below pasted scripts from the command line as root user, and select the MySQLi from the extension list. See the attached image for more details:

How to enable MySQLi

EasyApache 4

You can directly enable it from the WHM panel. Please do the following steps to enable it.

Step 1 : Log into WHM panel.

Step 2 : Go to Home » Software » EasyApache 4

Step 3 : Click on “Customize

How to enable MySQLi

Step 4 : Go to PHP Extensions

How to enable MySQLi

Accessing PhpMyAdmin without cPanel login?

This article will help you to access databases of cPanel users’ without accessing the cPanel account.

Consider the scenario, you’ve a cPanel account and you want to share the details of a database (DB) with one of your we site developers and actually you do not want to share the cPanel credentials.

In EasyApache 4, the mysqli extension is provided by the mysqlnd package. To illustrate this, here is a list of the files that are provided by the ea-php55-php-mysqlnd package.

how to enable MySQLi extension on web-server without cPanel?

In a server without cPanel, you need to compile the MySQL with the MySQLi extension.

How to check the MySQLi extension is enabled on server?

Related links:

Post navigation

Arunlal Ashok

SRE at Endurance International Group. Linux lover. Like to play on Linux console. I started this blog to share and discuss Linux thoughts.

Always happy for an open discussion! Write to arun (@) crybit (dot) com.

21 thoughts on “ How to enable MySQLi extension on web-server ”

Thanks Man this really helped me as I needed to relocate one of my wordpress websites using the Duplicator plugin and i was jammed up due the the MySQLi Extension not running. Your guide made it very easy for me and I’m not a server guy Thanks!

Ссылка на основную публикацию
Adblock
detector