Как найти файл 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.