PHP CLI: Вызов неопределенной функции mysqli_connect() даже с включенным модулем mysqli.

Вопрос или проблема

Я получаю ошибку “Call to undefined function mysqli_connect()”, когда пытаюсь подключиться к базе данных из интерфейса командной строки (CLI), но тот же скрипт работает нормально в вебе.

Как я могу подключиться к базе данных из PHP CLI?

Спасибо!!!

.

Ответ или решение

Ошибка "Call to undefined function mysqli_connect()" в PHP CLI является частой проблемой, с которой сталкиваются разработчики, пытаясь выполнить скрипт из командной строки, в то время как тот же код прекрасно работает через веб-сервер. Давайте подробно разберем возможные причины этого явления и способы его устранения.

Теория

Проблема заключается в различиях между средами CLI и веб-сервера. Каждая из них может использовать разные конфигурационные файлы php.ini. Веб-сервер (например, Apache или Nginx) читает свою версию конфигурационного файла, который может быть настроен так, чтобы использовать расширение mysqli. В то время как CLI может использовать другой файл, в котором это расширение не загружено.

Другой ключевой момент — это пути установки PHP и предлагаемых расширений. Вполне возможно, что PHP CLI использует другую версию PHP, на которой mysqli не установлен или не активирован.

Пример

Рассмотрим следующую ситуацию. Вы пишете PHP-скрипт, который успешно выполняется через веб-браузер, но при попытке запуска его через CLI вы получаете ошибку:

php myscript.php

И в ответ видите:

PHP Fatal error:  Uncaught Error: Call to undefined function mysqli_connect() in /path/to/myscript.php:3

В то время как все работает корректно из браузера. Это означает, что расширение mysqli не загружается в CLI-среде.

Применение

Проверьте конфигурационный файл php.ini

  1. Найдите активный php.ini в CLI: Используйте следующую команду, чтобы увидеть, какой конфигурационный файл загружается для CLI:

    php -i | grep "Loaded Configuration File"
  2. Сравните с php.ini веб-сервера: Убедитесь, что файл, загружаемый веб-сервером, и файл CLI используют одинаковые настройки. Вы можете проверить файл для веб-сервера, создав PHP-скрипт с phpinfo() и открыв его через браузер. Сравните загруженные модули.

  3. Активируйте расширение mysqli в CLI: Откройте CLI-конфигурационный файл php.ini и проверьте наличие строки:

    extension=mysqli.so

    Если этой строки нет, добавьте её. Если она закомментирована (например, ;extension=mysqli.so), раскомментируйте её.

Убедитесь в одинаковой установке PHP

  1. Проверка версии PHP: Убедитесь, что веб-сервер и CLI используют одну и ту же версию PHP:

    php -v

    Это поможет удостовериться, что конфигурации и расширения совместимы.

  2. Совпадение путей: Проверьте, что путь к PHP одинаков как в CLI, так и на веб-сервере. Используйте команду which php для CLI и phpinfo() для проверки через веб-сервер.

Проверка доступности расширения

  • Убедитесь, что файл mysqli.so действительно существует в директории расширений. Путь к этой директории обычно задается директивой extension_dir в php.ini.

  • Проверьте права доступа к файлам, чтобы убедиться, что PHP CLI имеет правильные разрешения для чтения файлов расширений.

Устранение зависимости

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

$pdo = new PDO('mysql:host=localhost;dbname=database', 'username', 'password');

Заключение

Ошибка "Call to undefined function mysqli_connect()" в PHP CLI часто связана с неправильной конфигурацией php.ini для CLI и веб-сервера. Убедитесь, что расширение mysqli загружается в обеих средах. Проблема также может возникнуть из-за использования разных версий PHP или конфигурационных путей.Пройдите по всем приведенным выше шагам, чтобы диагностировать и устранить проблему, и ваши скрипты будут работать как из браузера, так и из командной строки без ошибок.

Оцените материал
Добавить комментарий

Капча загружается...