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


389

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

extension=php_pdo_mysql.dll

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



@sjas Это не неправильно, это правильно и даст вам знать путь к загруженному php.ini в cli.
— SaidbakR

Ответы:


952

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


5
@Mchl Я бы тебя голосовал, но думаю, тебе следовало написать ответ с grep в строке.
— Джим В.

9
@BradFJacobs зачем использовать grep, когда он теперь кроссплатформенный?
— Гарет Клэборн

Но разве это не просто показывает тот, который загружается при использовании PHP через CLI (потому что вы запускаете команду из этого).
— Энтони Д'Андреа

1
@ AntonyD'Andrea: это именно то, о чем идет речь. Видеть? Так говорится даже в заголовке: Как найти файл php.ini, используемый командной строкой ?
— Mchl

это не мой ответ ... в моем случае я печатаю, sudo find / -iname php.iniи он находит /etc/php/7.0/apache2/php.iniправильное место правильного файла конфигурации php.ini моей машины, который не был найден php --iniили php -i | grep php.ini(оба найдены /etc/php/7.0/cli/php.ini)
— NineCattoRules

366

Вы можете получить полное phpinfo()использование:

php -i 

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

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

В Windows используйте findвместо:

php -i|find/i"configuration file"

12
Тогда этот экземпляр php вообще не использовал php.ini, кроме значений по умолчанию. Configuration FileЛиния phpinfo () показывает последнее место , где PHP выглядел для INI - файлов. Это может быть либо место, где был найден такой файл, либо последний параметр, который в Windows выглядит как% SYSTEMROOT%.
— VolkerK

2
@pascal: php -i | find "Configuration file"должен работать в Windows. Определенно, не такой мощный, как grep, но findсделает основной поиск строки для вас. Конечно, если php -i выводит свой вывод в stderr, вы, вероятно, SOL.
— Марк Б

2
findпо умолчанию чувствителен к регистру, поэтому он должен быть совершенным ( php -i | find "Configuration File") или нечувствительным к регистру ( php -i | find /i "Configuration file"- отметьте /iфлаг).
— Деизель

9
Рассмотрите возможность добавления php --iniв качестве альтернативы; доступно с PHP 5.2.3 :)
— Ja͢ck

2
Никто не упомянул, что можно взять это значение из скрипта, вызвав php_ini_loaded_file и, когда это необходимо, php_ini_scanned_files
— Радек Бенкель

16

Для этого вы можете использовать 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

13

Запустите 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

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


8

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

Я использую очень мощную и полезную программу командной строки под названием 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

1
php -iдал мне неверные результаты, но этот прекрасно. Спасибо!
— Дмитрий Гинзбург

7

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

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

6

На 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]), и проблема решена.

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


5

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

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

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


3

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


2
Правильно, это говорит мне C: \ WINDOWS. Но я не нашел это там серьезно!
— Амокране Чентир

2

Делать

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

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

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


Это не работает, если нет файла php.ini (некоторые Docker-контейнеры). Поэтому принятый ответ лучше подходит.
— Мануэль

myyyyyyyyyy man
— doc holiday

@emilioestevez * женщина
— Уилсманли

1

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

extension_dir = "C:/php/ext/"

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


0

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

php -i >> phpinfo-cli.txt

0

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

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


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.