Как узнать, какой php.ini использует командная строка PHP?
Как точно определить, какой php.ini использует командная строка
Проблема, с которой вы столкнулись, очень распространена среди разработчиков, особенно на Windows. Дело в том, что PHP, запущенный через веб-сервер (Apache, Nginx) и через командную строку (CLI — Command Line Interface) — это фактически два разных "экземпляра" PHP, каждый из которых может читать свой собственный конфигурационный файл. EasyPHP часто настраивает свой внутренний PHP для веба, но при этом в системе может быть установлен другой PHP, который подхватывается из PATH.
Вот несколько проверенных способов найти правильный php.ini для CLI:
Способ 1: Использование встроенной команды PHP (самый надёжный)
Запустите в командной строке следующую команду:
php --ini
Вы увидите вывод, похожий на этот:
Configuration File (php.ini) Path: C:\Windows
Loaded Configuration File: C:\php-8.1.0\php.ini
Scan for additional .ini files in: C:\php-8.1.0\ext
Additional .ini files parsed: (none)
Строка "Loaded Configuration File" — это и есть путь к тому самому php.ini, который сейчас использует ваша командная строка. Если там написано "(none)", значит PHP не нашёл ни одного php.ini и использует значения по умолчанию.
Способ 2: phpinfo() в командной строке
Вы уже пробовали этот метод, но давайте сделаем его более точным. Создайте файл info.php с одной строкой:
<?php phpinfo();
Затем выполните в консоли:
php info.php | findstr /I "php.ini"
На Linux/macOS используйте grep:
php info.php | grep -i "php.ini"
Вы увидите строку "Loaded Configuration File" с полным путём.
Способ 3: Проверка через переменную PHP_SELF (для продвинутых)
Можно выполнить однострочный скрипт прямо в консоли:
php -r "echo php_ini_loaded_file();"
Эта функция возвращает путь к загруженному конфигурационному файлу или false, если файл не найден.
Почему CLI и веб используют разные php.ini?
Это нормальное поведение. Обычно это происходит по нескольким причинам:
- Разные бинарники PHP: EasyPHP хранит свой PHP в папке
C:\Program Files\EasyPHP\binaries\php\, а в системной переменной PATH прописан другой PHP, например, изC:\php\. - Разные параметры компиляции: CLI-версия может быть собрана без поддержки некоторых расширений (хотя это редкость).
- Разные директории поиска: PHP ищет php.ini в разных местах. По умолчанию он проверяет: текущую директорию, директорию с php.exe, системную директорию Windows, а также путь, указанный в переменной окружения
PHPRC.
Как заставить CLI использовать тот же php.ini, что и веб-сервер?
Вот пошаговая инструкция:
- Сначала найдите путь к php.ini, который используется веб-сервером (через phpinfo() в браузере).
- Откройте командную строку и выполните
php --ini, чтобы узнать, какой файл загружается сейчас. - Скопируйте путь из п.1 и установите переменную окружения
PHPRC:
Чтобы это работало постоянно, добавьте эту переменную в системные переменные через "Свойства системы" -> "Дополнительно" -> "Переменные среды".set PHPRC="C:\Program Files\EasyPHP\binaries\php\php81\php.ini" - Либо просто скопируйте нужный php.ini поверх того, что использует CLI (но это менее гибкий способ).
- Перезапустите командную строку и проверьте результат командой
php --ini.
Также рекомендую проверить, какой именно PHP вызывается из командной строки:
where php
Эта команда покажет полный путь к исполняемому файлу. Если это не тот PHP, что вам нужен, измените порядок путей в переменной PATH.
<<Альтернативный подход: Использование php -c для принудительного указания конфига
Если вам не нужно менять глобальные настройки, а требуется лишь временно запустить скрипт с определённым php.ini, используйте флаг -c (или --php-ini):
php -c "C:\Program Files\EasyPHP\binaries\php\php81\php.ini" test.php
Этот способ полезен для тестирования, когда вы хотите убедиться, что проблема именно в конфигурации, а не в чём-то ещё. Вы также можете указать директорию, а не конкретный файл — PHP будет искать php.ini в этой папке:
php -c "C:\Program Files\EasyPHP\binaries\php\php81" test.php
Проверка всех возможных мест поиска php.ini
Иногда полезно понять, где PHP вообще ищет конфигурацию. Запустите:
php -i | findstr /I "Scan this dir"
Вы увидите список директорий, которые PHP сканирует в поисках дополнительных ini-файлов. В EasyPHP часто используется механизм дополнительных конфигов (например, для включения расширений). Проверьте, нет ли там конфликта — возможно, в одном из дополнительных файлов расширение openssl отключено.
Также рекомендую проверить саму команду php -m (список загруженных модулей) с явным указанием конфига:
php -c "путь_к_вашему_php.ini" -m
Сравните вывод с тем, что показывает веб-версия. Если модуль появляется — проблема решена простым копированием конфига или настройкой PATH.