Где я могу найти php.ini?

882

Несколько лет назад я установил Apache 2.2x и PHP 5.3.1 на сервер Linux, который я поддерживаю. Я использовал .tar.gz и построил их в соответствии с инструкциями (вместо rpms и what-have-you). И все было хорошо.

Сегодня мне нужно установить это, которое похоже на библиотеку 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
Адам
Также см stackoverflow.com/q/2750580/632951
Pacerier
6
Даунтинг, потому что предпосылка вопроса неверна. «В моей системе нет php.ini» Нет, вы просто не смогли найти его. Говоря о том, locate php.iniскажу вам в простые моменты, когда файл находится в вашей системе.
Гонки легкости на орбите
1
@Adam: если это не PHP5;)
строка
2
@line да, мой комментарий уже не слишком актуален, хотя я и не осознавал количество голосов!
Адам

Ответы:

466

Лучший способ найти это: создать файл php и добавить следующий код:

<?php phpinfo(); ?>

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

Обновления от OP:

  1. Ранее принятый ответ , вероятно, будет быстрее и удобнее для вас, но он не всегда корректен. Смотрите комментарии к этому ответу.
  2. Также обратите внимание на более удобную альтернативу, <?php echo php_ini_loaded_file(); ?>упомянутую в этом ответе .
Tejas
источник
11
Это должен быть принятый ответ. Если у вас установлен CLI и запущен apache, он может иметь свой собственный INI-файл (как это делает моя система). Использование принятого ответа возвращает то, что использует CLI, а не Apache.
Дан
2
@ Дан Да, ты прав. Я изменяю принятый ответ на этот, потому что проблема, о которой вы упоминаете, также встречалась на практике с кем-то (кто прокомментировал ранее принятый ответ). (Кстати, если бы вы прокомментировали вопрос, я бы исправил эту проблему раньше.)
Некромант,
2
Это не работает на моей установке. Опечатка? Должно быть<?php phpinfo(); ?>
svenyonson
9
php -r \@phpinfo\(\)\;работает для меня, php -r \@phpinfo\(\)\; | grep 'PHP Version' -m 1чтобы получить конкретную информацию
jgraup
@zylstra Try:<?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делает то же самое для командной строки, но это довольно неудобно.

KingCrunch
источник
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
coderama
источник
5
Это работает только, если этоphp.ini , что именно проблема: Если нет ни одного, вы еще не знаете , где смотреть, или где разместить новый.
KingCrunch
Я никогда не сталкивался с ситуацией, когда нет файла php.ini.
Coderama
Запуск этой команды дает мне 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();
bibliophilsagar
источник
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
26
phpinfo();

скажет вам его местонахождение или из командной строки

php -i
Лениэль Маккаферри
источник
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());'
Creaforge
источник
Недооцененный, тщательный и (почти) правильный ответ. Я почти переключил это на правильный ответ, но я волнуюсь, что php_ini_loaded_fileэто не всегда может быть доступно.
некромант
@zylstra какая у тебя была версия php? документы для php_ini_loaded_fileскажем php версии> = 5.2.4
некромант
@necromancer Не уверен, сейчас. Забыл, какую систему я проверял. : /
Zylstra
8
find / -name php.ini

Эй ... у меня это сработало!

Banned_User
источник
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/

NightKnight на Cloudinsidr.com
источник
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.
cherankrish
источник
пункты 1, 2 и 4 уязвимы для множества проблем установки; уже есть отличные ответы. нет необходимости добавлять ответ, который ничего не добавляет здесь.
Некромант
@necromancer объясните ваши проблемы подробно, так что это будет полезно для кого-то. У нас есть отрицательные и отрицательные ответы за плохие и бесполезные ответы, и сообщество решит.
cherankrish
-1

Уже упоминалось несколько допустимых способов поиска файла php.ini, но если вы натолкнулись на эту страницу, потому что хотите что-то с ней сделать в скрипте bash:

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

Cragmonkey
источник
1
вместо этого посмотрите это: stackoverflow.com/a/24342463/621338 вместо того, чтобы вычистить его, что является хрупким, если текст изменяется, вы можете заставить php распечатать только имя файла и использовать его в скрипте bash без сложных вещей, подобных описанному выше.
некромант