1070

A few years ago I installed Apache 2.2x and PHP 5.3.1 on a Linux server I maintain. I used .tar.gz's and built them as instructed (instead of rpms and what-have-you). And all was fine.

Today I needed to install this which seems like a PHP library. I went through all the steps up to make install, and I found ibm_db2.so in $PHP_HOME/lib/extensions/somecomplicatedname/ibm_db2.so.

The great catch is the last step is to configure file php.ini, but there aren't any php.ini files on my system. Horror of horrors. PHP works fine, except of course for this newfangled ibm_db2 thingamajig that I want to use so somebody can use a GUI to tinker with DB2. (I tried a small PHP script which fails and indicates that the ibm_db2 functions are not available.)

I have to deal with PHP once every few years, so please enlighten me at a very basic level about what I could do to enable web-based GUI access to DB2.

yivi
  • 42,438
  • 18
  • 116
  • 138
necromancer
  • 23,916
  • 22
  • 68
  • 115

14 Answers14

1054

On the command line execute:

php --ini

You will get something like:

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

That's from my local dev-machine. However, the second line is the interesting one. If there is nothing mentioned, have a look at the first one. That is the path, where PHP looks for the php.ini file.

You can grep the same information using phpinfo() in a script and call it with a browser. It’s mentioned in the first block of the output. php -i does the same for the command line, but it’s quite uncomfortable.

Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
KingCrunch
  • 128,817
  • 21
  • 151
  • 173
  • 5
    accepting oldest and previously the simplest answer (SO forces me to wait a while before accepting). thanks for the expansion which will probably help the next person looking for information. for me the 2nd line said (none), and everything worked fine after putting a php.ini file in the path on the first line. thanks! – necromancer Dec 30 '11 at 22:40
  • 20
    I used this command and edited the php.ini file that it directed me too and my PHP settings were not changing and I realized it was not giving me the correct php.ini file. I tried using the phpinfo() PHP function and it give me the actual correct location of the php.ini I needed to edit. I think this is very important and I hope this helps someone. – thecommonthread Jun 17 '14 at 18:24
  • @thecommonthread Thank you for pointing out the problem you encountered in practice. I have changed the accepted answer to one that highlights creating a `.php` file. By the way, if you comment on the question then I get notified and I can fix the problem sooner. – necromancer Sep 13 '14 at 21:06
  • @KingCrunch, Are you sure this is going to work when you have more than one PHP installation? – Pacerier Jun 24 '15 at 11:16
  • @Pacerier Yes. Just make sure you execute the right executable: `/path/to/one/php --ini` and `/path/to/another/php --ini`. – KingCrunch Jun 24 '15 at 13:50
  • @KingCrunch, Then what about [thecommonthread's comment](http://stackoverflow.com/questions/8684609/dude-wheres-my-php-ini#comment37497172_8684638) above? – Pacerier Jun 25 '15 at 02:25
  • 5
    @Pacerier This has nothing to do with different PHP installations, but the different SAPIs can use different ini files. I don't use the apache module, but as far as I remember I think there is no way around a `phpinfo.php`-like file. With FPM you can at least use `php5-fpm -i | grep '\.ini'`. Usually you use this two or three times and at the end of the day you _know_ where the files are ;) – KingCrunch Jun 26 '15 at 07:05
  • Also on some lamp stacks this will return you only the php-cli php-ini. – CodeBrauer Aug 18 '15 at 10:01
  • 2
    I ended up editing the wrong ini file too, wasting an hour. This may be my own stupidity, but this is a warning to people like me- if it's not working create a as above because that fixed it for me – Chris Beeley Jul 07 '19 at 11:03
543

The best way to find this is:

Create a PHP (.php) file and add the following code:

<?php phpinfo(); ?>

and open it in a browser. It will show the file which is actually being read!

Updates by the OP:

  1. The previously accepted answer is likely to be faster and more convenient for you, but it is not always correct. See comments on that answer.
  2. Please also note the more convenient alternative <?php echo php_ini_loaded_file(); ?> mentioned in this answer.
Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
Tejas
  • 6,508
  • 1
  • 21
  • 25
  • 12
    This should be the accepted answer. If you have CLI installed and have apache running then it may have its own ini file (as my system does). Using the accepted answer returns what the CLI is using rather than apache's. – Dan May 30 '14 at 23:44
  • 2
    @Dan Yes, you are right. I am changing the accepted answer to this one because the problem you mention was also encountered somebody in practice (who commented on the previously accepted answer). (By the way, if you had commented on the question I would have fixed this problem sooner.) – necromancer Sep 13 '14 at 21:02
  • 2
    This does not work on my installation. Typo? Should be `` – svenyonson Jan 23 '15 at 18:33
  • 10
    `php -r \@phpinfo\(\)\;` works for me `php -r \@phpinfo\(\)\; | grep 'PHP Version' -m 1` to pull specific info – jgraup Feb 02 '16 at 19:35
  • @zylstra Try: `` – Ates Goral Jun 27 '17 at 15:55
  • the problem with this is when php does not want to load – Fantastory Jan 30 '20 at 15:22
  • maybe mention the very convenient `php -i | grep "Loaded Configuration File" | sed 's#.* ##' | xargs vim` for easy editing or `php -i | grep "Loaded Configuration File" | sed 's#.* ##' | xargs cat` for easy displaying? – Xanlantos Jan 20 '21 at 12:58
  • Re *"it will show the file which is actually being read"*: Can you be more specific [in your answer](https://stackoverflow.com/posts/17185370/edit) what to look for? E.g., is it the line with *"Loaded Configuration File"*? – Peter Mortensen Aug 08 '21 at 16:26
167

This works for me:

php -i | grep 'php.ini'

You should see something like:

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

P.S.

To get only the php.ini path, use:

php -i | grep /.+/php.ini -oE
Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
rockstardev
  • 13,479
  • 39
  • 164
  • 296
  • 7
    This only works, if there _is_ a `php.ini`, which is exactly the problem: If there is none, you still don't know where to look at, or where to place a new one. – KingCrunch Aug 08 '13 at 20:30
  • I've never come across a situation where there is no php.ini file. – rockstardev Dec 30 '13 at 14:46
  • Running this command gives me `Configuration File (php.ini) Path => /usr/lib`, but running `` gives me `Loaded Configuration File: /etc/php.ini`. So, `phpinfo()` was more reliable in my case. – Leo Galleguillos Jun 13 '14 at 18:35
  • 4
    This is not entirely correct. Every framework that uses the PHP language has it's own php.ini file. If you call that line from the command line, you will probably end up receiving something like /var/php5/cli/php.ini which is not the file used when running PHP on a web environment. For that file, you should look into the apache2 folder. – Andrea Moro Jun 23 '14 at 13:26
  • is possible get the output `php -i | grep 'php.ini'` from apache? (script.php) – Stackoverflow Jan 11 '22 at 15:38
72

In a command window, type

php --ini

It will show you the path something like:

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

If the above command does not work then use this:

echo phpinfo();
Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
bibliophilsagar
  • 1,713
  • 1
  • 19
  • 40
41

Use the following command to find the php.ini file path on Linux.

locate php.ini

Output:

/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

Or try this other way:

php --ini

It shows the path result.

Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
Sakthi Karthik
  • 3,105
  • 4
  • 25
  • 29
  • 12
    This is inferior to methods like `php -i | grep 'php.ini'`, because it finds *any* php.ini and doesn’t tell you which one your PHP installation uses. Also, it may give wrong results when the `locate` DB is not up to date. – lxg Feb 17 '16 at 11:09
  • `locate` is not installed by default on [Ubuntu MATE 20.04](https://en.wikipedia.org/wiki/Ubuntu_MATE#Releases) (Focal Fossa). – Peter Mortensen Aug 21 '21 at 11:48
35

This command should help you to find it

php -r "phpinfo();" | grep php.ini
Philippe Boissonneault
  • 3,949
  • 3
  • 26
  • 33
  • 1
    I like this a lot more than some of the other answers. It doesn't require that I create, locate a php file with those contents and load up the page in the browser. – Andrew Allbright Oct 16 '17 at 20:38
31

PHP comes with two native functions to show which configuration file is loaded:

Depending on your setup, Apache and CLI might use different .ini files. Here are the two solutions:

Apache:

Just add the following in a PHP (.php) file and open it in your browser:

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

CLI:

Copy-paste in your terminal:

php -r 'print php_ini_loaded_file(); print_r(php_ini_scanned_files());'
Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
GuCier
  • 6,919
  • 1
  • 29
  • 36
  • 1
    Under-appreciated, thorough, and (almost) correct answer. I almost switched this to the correct answer but I am worried that `php_ini_loaded_file` may not always be available. – necromancer Jun 10 '17 at 00:51
  • @zylstra what was your php version? the docs for `php_ini_loaded_file` say php version >= 5.2.4 – necromancer Jun 10 '17 at 00:52
  • @necromancer Not sure now. Forgot which system I was checking. :/ – zylstra Jun 11 '17 at 16:54
27
phpinfo();

will tell you its location, or from the command line

php -i
Leniel Maccaferri
  • 100,159
  • 46
  • 371
  • 480
21

Try one of these solutions

  1. In your terminal, type find / -name "php.ini"

  2. In your terminal, type php -i | grep php.ini. It should show the file path as "Configuration File (php.ini) Path => /etc"

  3. If you can access one of your PHP files, open it in a editor (Notepad) and insert phpinfo(); after <?php on a new line. This will tell you the php.ini location.

  4. You can also talk to PHP in interactive mode. Just type php -a in the terminal and type phpinfo(); after the PHP interpreter initiated.

Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
cherankrish
  • 2,004
  • 1
  • 16
  • 11
  • 1
    points 1, 2, and 4 are vulnerable to multiple installation problems; there are already great answers. no need to add an answer that doesn't add anything here. – necromancer Sep 18 '19 at 09:18
21

Run this in the command line:

php -r "echo php_ini_loaded_file().PHP_EOL;"
Max S.
  • 1,383
  • 14
  • 25
7
find / -name php.ini

Hey... it worked for me!

Banned_User
  • 973
  • 2
  • 9
  • 17
  • 5
    for one, it takes a while; for two, if you have more than one, how do you know which is the one actually in use? – necromancer Dec 23 '14 at 10:07
  • 1
    True, `php --ini` works, but this is just another option :) There is usually a `/etc/php5/cli/php.ini` `/etc/php5/apache2/php.ini` `/etc/php5/cgi/php.ini` and usually which one you want is pretty obvious. (cli, apache, cgi) – Banned_User Dec 25 '14 at 10:31
  • 1
    This is not a good solution, because we are not intended to find all the php.ini file on disk. –  Mar 10 '18 at 23:14
4

For SAPI: php-fpm

There isn't any need to create a php.info file (it is not a good policy to leave it for the world to read anyway). On the command line:

php-fpm -i | more

Somewhere in its output, it will show this line:

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

Here is a more complete explanation: How to Figure out Your PHP Configuration Parameters without info.php

Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
4

You can get more information about your configuration files using something like:

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

Configure Command =>  './configure'  ...
Loaded Configuration File => /path/to/php.ini
Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
Mike Purcell
  • 19,847
  • 10
  • 52
  • 89
0

according to this answer, as of PHP 7 the regular php.ini file was removed and added with php.ini-production and php.ini-devlopment.

so instead of php.ini which does not exist in my case (I've installed php 8.1), use php.ini-production and it's located in php installation folder (something like: C:\PHP-8.1.5) and create a file and name it php.ini and then copy contents of php.ini-production in this new php.ini.

Zahra
  • 2,231
  • 3
  • 21
  • 41