Як знайти файл php.ini, який використовується в командному рядку?


389

Мені потрібно ввімкнути pdo_mysql в моєму середовищі EasyPhp, тому я перейшов до файлу php.ini і прокоментував наступний рядок:

extension=php_pdo_mysql.dll

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



@sjas Це не неправильно, це правильно і повідомляти вам шлях завантаженого php.ini в кліпі.
SaidbakR

Відповіді:


951

Просто запустіть php --iniі шукайте Loaded Configuration Fileу висновку місце розташування php.iniвикористовуваного вами CLI


5
@Mchl Я б схвалив вас, але, думаю, ви повинні розмістити відповідь із грепом у рядку.
Jim W.

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 - файлів. Це може бути або місце, де він знайшов такий файл, або остання опція, яка, як буває,% SYSTEMROOT% у Windows.
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прапор).
deizel

9
Розгляньте додавання php --iniяк альтернативу; доступний з PHP 5.2.3 :)
Ja͢ck

2
Ніхто не згадував, що це значення можна взяти зі скрипту, зателефонувавши на php_ini_loaded_file і коли потрібно php_ini_scanned_files
Radek Benkel

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

Для пошуку подій 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. Але я там не знайшов її серйозно!
Amokrane Chentir

2

Зробіть

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

Це виведе всі названі файли php.ini.

Дізнайтеся, який саме ви використовуєте, як правило apache2/php.ini


Це не працює, якщо немає файлу php.ini (деякі контейнери докера). Для цього прийнята відповідь краще підходить.
Мануель

myyyyyyyyyy людина
doc свято

@emilioestevez * жінка
willsmanley

1

У файлі php.ini встановіть каталог розширень, наприклад:

extension_dir = "C:/php/ext/"

Ви побачите, що у вашій папці PHP є папка ext із усіма dll та розширеннями.


0

Збережіть CLI-вихідний файл CLP у локальний файл:

php -i >> phpinfo-cli.txt

0

У контейнері docker phpmyadmin / phpmyadmin немає файлу php.ini. Але є два файли: php.ini-debug та php.ini-production

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


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.