Де я можу знайти php.ini?


881

Кілька років тому я встановив Apache 2.2x та PHP 5.3.1 на сервері Linux, який я підтримую. Я використав .tar.gz і створив їх за інструкцією (замість rpms і що-у вас є). І все було добре.

Сьогодні мені потрібно встановити це, схоже, на бібліотеку PHP. Я пройшов усі кроки, щоб встановити, і знаходжу ibm_db2.so в$PHP_HOME/lib/extensions/somecomplicatedname/ibm_db2.so

Чудовим уловом є останній крок - налаштувати php.ini, але в моїй системі немає PHp.ini. Жах жахів. PHP працює добре, за винятком, звичайно, цієї новомодної ibm_db2 речімагічної, яку я хочу використовувати, щоб хтось міг використовувати графічний інтерфейс, щоб повозитися DB2. (Я спробував невеликий скрипт php, який не вдається і вказує на те, що функції ibm_db2 недоступні).

Мені доводиться мати справу з PHP раз на кілька років, тому, будь ласка, просвітите мене на дуже базовому рівні щодо того, що я можу зробити, щоб дозволити доступ до веб-інтерфейсу GUI DB2.


120
90% часу це /etc/php5/apache2/php.ini
Адам


6
Відхилення, тому що передумова питання неправильна. "У моїй системі немає php.ini" Ні, ви просто не знайшли її. Якщо говорити про це, locate php.iniто мимоволі підкажемо, де файл знаходиться у вашій системі.
Гонки легкості на орбіті

1
@Adam: якщо це не PHP5;)
Рядок

2
@line так, мій коментар уже не надто актуальний, хоча не усвідомлював кількість нагород!
Адам

Відповіді:


466

Найкращий спосіб знайти це: створити файл php та додати наступний код:

<?php phpinfo(); ?>

і відкрийте його в браузері, він покаже файл, який насправді читається!

Оновлення за ОП:

  1. Раніше прийнята відповідь , швидше за все, буде для вас швидшою та зручнішою, але не завжди є правильною. Дивіться коментарі до цієї відповіді.
  2. Також зверніть увагу на більш зручну альтернативу, <?php echo php_ini_loaded_file(); ?>згадану в цій відповіді .

11
Це має бути прийнятою відповіддю. Якщо у вас встановлений CLI та працює apache, він може мати власний файл ini (як це робить моя система). Використання прийнятої відповіді повертає те, що використовує CLI, а не apache.
Дан

2
@Dan Так, ви праві. Я змінюю прийняту відповідь на цю, тому що проблема, яку ви згадуєте, також зустрічалася у когось на практиці (хто коментував раніше прийняту відповідь). (До речі, якби ви прокоментували це питання, я би вирішив цю проблему раніше.)
некромант

2
Це не працює на моїй установці. Друкарська помилка? Має бути<?php phpinfo(); ?>
svenyonson

9
php -r \@phpinfo\(\)\;працює для мене, php -r \@phpinfo\(\)\; | grep 'PHP Version' -m 1щоб отримати конкретну інформацію
jgraup

@zylstra Спробуйте:<?php echo php_ini_loaded_file(); ?>
Ates Goral

834

У командному рядку виконайте:

php --ini

Ви отримаєте щось на кшталт:

Configuration File (php.ini) Path: /etc/php5/cli
Loaded Configuration File:         /etc/php5/cli/php.ini
Scan for additional .ini files in: /etc/php5/cli/conf.d
Additional .ini files parsed:      /etc/php5/cli/conf.d/curl.ini,
/etc/php5/cli/conf.d/pdo.ini,
/etc/php5/cli/conf.d/pdo_sqlite.ini,
/etc/php5/cli/conf.d/sqlite.ini,
/etc/php5/cli/conf.d/sqlite3.ini,
/etc/php5/cli/conf.d/xdebug.ini,
/etc/php5/cli/conf.d/xsl.ini

Це від моєї місцевої машини для розробників. Однак другий рядок - цікавий. Якщо нічого не згадується, погляньте на перший. Це шлях, на якому PHP шукає php.ini.

Ви можете зібрати таку саму інформацію за phpinfo()допомогою сценарію та викликати її за допомогою браузера. Його згадується в першому блоці виходу. php -iробить те ж саме для командного рядка, але це досить незручно.


5
прийняття найдавнішої і раніше найпростішої відповіді (ТАК змушує мене почекати деякий час, перш ніж приймати). дякую за розширення, яке, ймовірно, допоможе наступній людині, яка шукає інформацію. для мене 2-й рядок сказав (немає), і все спрацювало нормально після того, як на першому рядку вставте файл php.ini в шлях. Дякую!
некромант

12
Я скористався цією командою і відредагував файл php.ini, що він мене також спрямовував, і мої настройки PHP не змінювалися, і я зрозумів, що він не дає мені правильного файлу php.ini. Я спробував використовувати функцію PHP phpinfo (), і це дало мені фактичне правильне розташування php.ini, яке мені потрібно було відредагувати. Я думаю, що це дуже важливо, і я сподіваюся, що це комусь допоможе.
thecommonthread

3
/etc/php5/apache2/php.ini
Адам

@thecommonthread Дякуємо, що вказали на проблему, з якою ви стикалися на практиці. Я змінив прийняту відповідь на одну, яка висвітлює створення .phpфайлу. До речі, якщо ви коментуєте це питання, то мене отримують сповіщення і я можу скоріше усунути проблему.
некроман

5
@Pacerier Це не має нічого спільного з різними установками PHP, але різні SAPI можуть використовувати різні ini-файли. Я не використовую модуль apache, але, наскільки я пам’ятаю, я думаю, що немає способу навколо phpinfo.phpфайлу-подібного. З FPM ви можете принаймні використовувати php5-fpm -i | grep '\.ini'. Зазвичай ви використовуєте це два-три рази, і в кінці дня ви знаєте, де файли;)
KingCrunch,

133

Це працює для мене:

php -i | grep 'php.ini'

Ви повинні побачити щось на кшталт:

Loaded Configuration File => /usr/local/lib/php.ini

ps Отримати лише шлях php.inin

php -i | grep /.+/php.ini -oE

5
Це працює тільки, якщо цеphp.ini , що саме проблема: Якщо немає жодного, ви ще не знаєте , де дивитися, чи де розмістити новий.
KingCrunch

Я ніколи не стикався з ситуацією, коли немає файлу php.ini.
кодерама

Виконання цієї команди дає мені Configuration File (php.ini) Path => /usr/lib, але біг <?php phpinfo(); ?>дає мені Loaded Configuration File: /etc/php.ini. Отже, phpinfo()був більш надійним у моєму випадку.
Лео Галлегільос

2
Це не зовсім правильно. Кожен фреймворк, що використовує мову PHP, має власний файл php.ini. Якщо ви зателефонуєте у цей рядок із командного рядка, ви, ймовірно, отримаєте щось на зразок /var/php5/cli/php.ini, що не є файлом, що використовується під час запуску PHP у веб-середовищі. Для цього файлу слід заглянути в папку apache2.
Андреа Моро

63

У командному вікні тип

php --ini

Це покаже вам шлях на зразок

Configuration File (php.ini) Path: /usr/local/lib
Loaded Configuration File:         /usr/local/lib/php.ini

Якщо вищевказана команда не працює, використовуйте це

echo phpinfo();

33

Ця команда повинна допомогти вам її знайти

php -r "phpinfo();" | grep php.ini

1
Мені це подобається набагато більше, ніж деякі інші відповіді. Для цього не потрібно, щоб я створював, знаходив файл php з цим вмістом і завантажував сторінку в браузер.
Ендрю Олбрайт

29

Використовуйте наступні команди, щоб знайти php.iniшлях до файлу в Linux.

[root@AnyDirectory ~]# locate php.ini
/etc/php.ini
/etc/php.ini.rpmnew
/usr/share/doc/php-common-5.4.45/php.ini-development
/usr/share/doc/php-common-5.4.45/php.ini-production


або спробуйте це іншим способом

[root@AnyDirectory ~]# php --ini
це показує результат шляху


11
Це поступається таким методам php -i | grep 'php.ini', тому що він знаходить будь-який php.ini і не говорить вам, який саме використовується ваша установка PHP. Крім того, це може дати неправильні результати, коли locateБД не оновлено.
lxg


22

PHP поставляється з двома нативними функціями, щоб показати, який конфігураційний файл завантажений:

  • php_ini_loaded_file повертає завантажений ini-файл
  • php_ini_scanned_files повертає список .ini файлів, розібраних з додаткового ini dir

Залежно від налаштувань, Apache та CLI можуть використовувати різні ini-файли. Ось два рішення:

Apache:

Просто додайте наступне у файл php та відкрийте його у своєму браузері

print php_ini_loaded_file();
print_r(php_ini_scanned_files());

CLI:

Скопіюйте та вставте у свій термінал:

php -r 'print php_ini_loaded_file(); print_r(php_ini_scanned_files());'

Недооцінена, ретельна та (майже) правильна відповідь. Я майже переключив це на правильну відповідь, але я переживаю, що це php_ini_loaded_fileможе бути не завжди.
некромант

@zylstra, яка у вас версія для php? Документи для php_ini_loaded_fileскажімо, версія php> = 5.2.4
некромант

@necromancer Зараз не впевнений. Забув, яку систему я перевіряв. : /
zylstra

8
find / -name php.ini

Гей ... це працювало на мене!


3
для одного потрібно певний час; на двох, якщо у вас їх більше, як ви знаєте, який саме використовується?
некромант

1
Правда, php --iniпрацює, але це просто інший варіант :) Зазвичай є, /etc/php5/cli/php.ini /etc/php5/apache2/php.ini /etc/php5/cgi/php.iniі той, який ви хочете, досить очевидний. (cli, apache, cgi)
Banned_User

Це не гарне рішення, оскільки ми не маємо на меті знайти весь файл php.ini на диску.

4

Ви можете отримати більше інформації про конфігураційні файли, використовуючи щось на кшталт:

$ -> php -i | ack config # Use fgrep -i if you don't have ack

Configure Command =>  './configure'  ...
Loaded Configuration File => /path/to/php.ini

4

Для SAPI: php-fpm

Немає необхідності створювати файл php.info (це не дуже добра політика залишати його для того, щоб він все-таки читав). У командному рядку:

php-fpm -i | more

Десь у своєму висновку він покаже цей рядок:

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

Ось більш повне пояснення: https://www.cloudinsidr.com/content/how-to-figure-out-your-php-configuration-parameters-without-info-php/


2

Спробуйте одне з цього рішення

  1. У своєму терміналі find / -name "php.ini"

  2. У своєму терміналі php -i | grep php.ini. Він повинен показувати шлях до файлу якConfiguration File (php.ini) Path => /etc

  3. Якщо ви можете отримати доступ до одного зі своїх файлів PHP, відкрийте його в редакторі (блокноті) та вставте код нижче <?php в новий рядок. phpinfo();Це підкаже вам місце php.ini
  4. Ви також можете поговорити з php в інтерактивному режимі. Просто введіть php -aтермінал і введіть phpinfo (); після запуску php.

пункти 1, 2 і 4 вразливі до численних проблем з установкою; вже є чудові відповіді. не потрібно додавати відповідь, яка нічого тут не додає.
некромант

@necromancer детально поясніть свої проблеми, щоб комусь було корисно. Ми проголосували проти поганих і невикористаних відповідей, і громада вирішить.
черанкриш

-1

Існує декілька дійсних способів пошуку файлу php.ini, але якщо ви натрапили на цю сторінку, тому що хочете щось зробити з нею у скрипті bash:

path_php_ini="$(php -i | grep 'Configuration File (php.ini) Path' | grep -oP '(?<=\=\>\s).*')" echo ${path_php_ini}


1
см замість цього: stackoverflow.com/a/24342463/621338 замість його змісту, яка є крихким , якщо зміни тексту, ви могли б PHP надрукувати тільки ім'я файлу і використовувати його в Баш скрипт без складної речі , як вище.
некромант
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.