Как найти файл php.ini, используемый командной строкой?

Мне нужно включить pdo_mysql в моей среде EasyPhp, поэтому я пошел в файл php.ini и раскомментировал следующую строку:

extension=php_pdo_mysql.dll

К сожалению, у меня все еще есть та же проблема. Я использую CLI, поэтому я предполагаю, что мне нужно найти файл php.ini, используемый CLI. Как я могу найти это?

17 ответов

Решение

Просто беги php --ini и искать Loaded Configuration File на выходе для расположения php.ini используется вашим CLI

Вы можете получить полный phpinfo() с помощью:

php -i 

И там есть php.ini используемый файл:

$ php -i | grep 'Configuration File'
Configuration File (php.ini) Path => /etc
Loaded Configuration File => /etc/php.ini

На винде используй find вместо:

php -i|find/i"configuration file"
php --ini

даст вам все подробности о пути использования и возможных INI-файлах

Для этого вы можете использовать get_cfg_var('cfg_file_path'):

Чтобы проверить, использует ли система файл конфигурации, попробуйте получить значение параметра конфигурации cfg_file_path. Если это доступно, файл конфигурации используется.
В отличие от phpinfo() он скажет, если он вообще не нашел / не использовал php.ini.

var_dump( get_cfg_var('cfg_file_path') );

И вы можете просто установить местоположение php.ini. Вы используете версию командной строки, поэтому с помощью -c параметр, который вы можете указать местоположение, например,

php -c /home/me/php.ini -f /home/me/test.php

Бежать php --ini в вашем терминале вы получите все подробности об INI-файлах

[root@tamilan src]# php --ini
Configuration File (php.ini) Path: /etc
Loaded Configuration File:         /etc/php.ini
Scan for additional .ini files in: /etc/php.d
Additional .ini files parsed:      /etc/php.d/apc.ini,
/etc/php.d/bcmath.ini,
/etc/php.d/curl.ini,
/etc/php.d/dba.ini,
/etc/php.d/dom.ini,
/etc/php.d/fileinfo.ini,
/etc/php.d/gd.ini,
/etc/php.d/imap.ini,
/etc/php.d/json.ini,
/etc/php.d/mbstring.ini,
/etc/php.d/memcache.ini,
/etc/php.d/mysql.ini,
/etc/php.d/mysqli.ini,
/etc/php.d/pdo.ini,
/etc/php.d/pdo_mysql.ini,
/etc/php.d/pdo_sqlite.ini,
/etc/php.d/phar.ini,
/etc/php.d/posix.ini,
/etc/php.d/sqlite3.ini,
/etc/php.d/ssh2.ini,
/etc/php.d/sysvmsg.ini,
/etc/php.d/sysvsem.ini,
/etc/php.d/sysvshm.ini,
/etc/php.d/wddx.ini,
/etc/php.d/xmlreader.ini,
/etc/php.d/xmlwriter.ini,
/etc/php.d/xsl.ini,
/etc/php.d/zip.ini

Для получения дополнительной информации используйте команду help php --help Он отобразит все возможные варианты.

Иногда вещи не всегда такие, какими кажутся, когда дело доходит до файлов конфигурации в целом. Поэтому здесь я применяю свои обычные методы для изучения того, какие файлы открываются процессом.

Я использую очень мощную и полезную программу командной строки под названием strace, чтобы показать мне, что на самом деле происходит за моей спиной!

$ strace -o strace.log php --version
$ grep php.ini strace.log

Strace обрабатывает вызовы ядра (системы), которые выполняет ваша программа, и выводит выходные данные в файл, указанный в -o

Grep легко использовать для поиска вхождений php.ini в этом журнале. Это довольно очевидно, глядя на следующий типичный ответ, чтобы увидеть, что происходит.

open("/usr/bin/php.ini", O_RDONLY)      = -1 ENOENT (No such file or directory)
open("/etc/php.ini", O_RDONLY)          = 3
lstat("/etc/php.ini", {st_mode=S_IFREG|0644, st_size=69105, ...}) = 0

Если вы хотите, чтобы все файлы конфигурации были загружены, это скажет вам:

php -i | grep "\.ini"

Некоторые системы загружают вещи из более чем одного файла INI. В моей системе Ubuntu это выглядит так:

$  php -i | grep "\.ini"
Configuration File (php.ini) Path => /etc/php5/cli
Loaded Configuration File => /etc/php5/cli/php.ini
Scan this dir for additional .ini files => /etc/php5/cli/conf.d
additional .ini files parsed => /etc/php5/cli/conf.d/apc.ini,
/etc/php5/cli/conf.d/curl.ini,
/etc/php5/cli/conf.d/gd.ini,
/etc/php5/cli/conf.d/mcrypt.ini,
/etc/php5/cli/conf.d/memcache.ini,
/etc/php5/cli/conf.d/mysql.ini,
/etc/php5/cli/conf.d/mysqli.ini,
/etc/php5/cli/conf.d/pdo.ini,
/etc/php5/cli/conf.d/pdo_mysql.ini

На OSX Mavericks, работает:

$ php -i | grep 'Configuration File'

Возвращается:

Configuration File (php.ini) Path => /etc
Loaded Configuration File:         (none)

в /etc/ каталог был:

php.ini.default

(так же как php-fpm.conf.default)

Я смог скопировать php.ini.default в php.ini, добавлять date.timezone = "US/Central" наверх (справа внизу [php]), и проблема решена.

(По крайней мере, сообщение об ошибке исчезло.)

Если вам нужно передать его в другое приложение, вы можете сделать что-то вроде:

php --ini | grep Loaded | cut -d" " -f12

возвращает только путь. php -c $(php --ini | grep Loaded | cut -d" " -f12) перейдет в файл конфигурации (полезно для fpm)

Самый простой способ в настоящее время - использовать PHP configure:

# php-config --ini-dir
/usr/local/etc/php/7.4/conf.d

Там вы можете найти больше. Пример вывода --help подкоманда (локальная установка macOS):

# php-config --help
Usage: /usr/local/bin/php-config [OPTION]
Options:
  --prefixUsage: /usr/local/bin/php-config [OPTION]
Options:
  --prefix            [/usr/local/Cellar/php/7.4.11]
  --includes          [-I/usr/local/Cellar/php/7.4.11/include/php - …ETC…]
  --ldflags           [ -L/usr/local/Cellar/krb5/1.18.2/lib -…ETC…]
  --libs              [ -ltidy -largon2 …ETC… ]
  --extension-dir     [/usr/local/Cellar/php/7.4.11/pecl/20190902]
  --include-dir       [/usr/local/Cellar/php/7.4.11/include/php]
  --man-dir           [/usr/local/Cellar/php/7.4.11/share/man]
  --php-binary        [/usr/local/Cellar/php/7.4.11/bin/php]
  --php-sapis         [ apache2handler cli fpm phpdbg cgi]
  --ini-path          [/usr/local/etc/php/7.4]
  --ini-dir           [/usr/local/etc/php/7.4/conf.d]
  --configure-options [--prefix=/usr/local/Cellar/php/7.4.11 --…ETC…]
  --version           [7.4.11]
  --vernum            [70411]

Делать

find / -type f -name "php.ini" 

Это выведет все файлы с именем php.ini,

Узнайте, какой вы используете, обычно apache2/php.ini

Сохраните вывод phpinfo CLI в локальный файл:

php -i >> phpinfo-cli.txt

Из того, что я помню, когда я использовал EasyPHP, файл php.ini находится либо в C:\Windows\ или же C:\Windows\System32

В Linux он обычно находится под /usr/bin/php

Чтобы найти php.ini, загруженный в CLI в Windows, запустите:

      php.exe -i | grep "php.ini"

Пс. Вы можете локализовать папку установки PHP с помощью:

      which php

или же

      whereis php

/c/laragon/bin/php/php-7.4.19-Win32-vc15-x64/php

В docker-контейнере phpmyadmin/phpmyadmin нет файла php.ini. Но есть два файла: php.ini-debug и php.ini-production

Чтобы решить проблему, просто переименуйте один из файлов в php.ini и перезапустите контейнер докеров.

В вашем файле php.ini установите каталог расширения, например:

extension_dir = "C:/php/ext/"

Вы увидите, что в вашей папке PHP есть папка ext со всеми DLL и расширениями.

В командной строке не используется php.ini. Вы должны скопировать файл из ...EasyPHP-<<version>>\apache\php.ini в ...EasyPHP-<<version>>\php\php.ini чем редактировать один в каталоге php

Ссылка:

Другие вопросы по тегам