How can I find the php.ini file used by the command line?
PhpEasyphpPhp Problem Overview
I need to enable pdo_mysql in my EasyPHP environment, so I went to the php.ini file and uncommented the following line:
extension=php_pdo_mysql.dll
Unfortunately I still have the same problem. I'm using the CLI so I suppose I need to locate the php.ini file used by the CLI. How can I find it?
Php Solutions
Solution 1 - Php
Just run php --ini
and look for Loaded Configuration File in the output for the location of php.ini
used by your CLI.
Solution 2 - Php
You can get a full phpinfo()
using:
php -i
And, in there, there is the php.ini
file used:
$ php -i | grep 'Configuration File'
Configuration File (php.ini) Path => /etc
Loaded Configuration File => /etc/php.ini
On Windows, use [find
][1] instead:
php -i | find/i"configuration file"
[1]: http://www.robvanderwoude.com/find.php "find"
Solution 3 - Php
You can use http://de.php.net/get_cfg_var">get_cfg_var('cfg_file_path')</a> for that:
To check whether the system is using a configuration file, try retrieving the value of the cfg_file_path configuration setting. If this is available, a configuration file is being used.Unlike phpinfo() it will tell if it didn't find/use a php.ini at all.
var_dump( get_cfg_var('cfg_file_path') );
And you can simply http://docs.php.net/configuration.file">_set_ the location of the php.ini. You're using the command line version, so using the -c
parameter you can specify the location for this particular run, e.g.
php -c /home/me/php.ini -f /home/me/test.php
Solution 4 - Php
Run php --ini
in your terminal, and you'll get all details about ini files:
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
For more, use helping command php --help
. It'll display all the possible options.
Solution 5 - Php
Sometimes things aren't always as they seem when in comes to configuration files in general. So here I'm applying my usual methods for exploring what files are opened by a process.
I use a very powerful and useful command-line program called strace to show me what's really going on behind my back!
$ strace -o strace.log php --version
$ grep php.ini strace.log
Strace digs out kernel (system) calls that your program makes and dumps the output into the file specified by -o
.
It's easy to use grep to search for occurrences of file php.ini in this log. It's pretty obvious looking at the following typical response to see what is going on.
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
Solution 6 - Php
If you want all the configuration files loaded, this is will tell you:
php -i | grep "\.ini"
Some systems load things from more than one ini file. On my Ubuntu system, it looks like this:
php -i | grep "\.ini"
Output
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
Solution 7 - Php
On OS X v10.9 (Mavericks), running:
$ php -i | grep 'Configuration File'
Returned:
Configuration File (php.ini) Path => /etc
Loaded Configuration File: (none)
In the /etc/
directory was:
php.ini.default
(as well as php-fpm.conf.default
)
I was able to copy php.ini.default
to php.ini
, add date.timezone = "US/Central"
to the top (right below [php]
), and the problem is solved.
(At least the error message is gone.)
Solution 8 - Php
If you need to pass it to another app, you can do something like:
php --ini | grep Loaded | cut -d" " -f12
returns the path only. php -c $(php --ini | grep Loaded | cut -d" " -f12)
will pass in the config file (useful for fpm
)
Solution 9 - Php
Try this if it could help you all:
find / -type f -name "php.ini"
This will output all files named php.ini
.
Find out which one you're using, usually apache2/php.ini
Solution 10 - Php
The easiest way nowadays is to use PHP configure:
php-config --ini-dir
Output:
/usr/local/etc/php/7.4/conf.d
There's more you can find there. The --help
sub command (macOS local install):
php-config --help
Output:
Usage: /usr/local/bin/php-config [OPTION]
Options:
--prefixUsage: /usr/local/bin/php-config [OPTION]
Options:
--prefix [/usr/local/Cellar/php/7.4.11]
--includes [-I/usr/local/Cellar/php/7.4.11/include/php - …ETC…]
--ldflags [ -L/usr/local/Cellar/krb5/1.18.2/lib -…ETC…]
--libs [ -ltidy -largon2 …ETC… ]
--extension-dir [/usr/local/Cellar/php/7.4.11/pecl/20190902]
--include-dir [/usr/local/Cellar/php/7.4.11/include/php]
--man-dir [/usr/local/Cellar/php/7.4.11/share/man]
--php-binary [/usr/local/Cellar/php/7.4.11/bin/php]
--php-sapis [ apache2handler cli fpm phpdbg cgi]
--ini-path [/usr/local/etc/php/7.4]
--ini-dir [/usr/local/etc/php/7.4/conf.d]
--configure-options [--prefix=/usr/local/Cellar/php/7.4.11 --…ETC…]
--version [7.4.11]
--vernum [70411]
Solution 11 - Php
From what I remember when I used to use EasyPHP, the php.ini file is either in C:\Windows\
or C:\Windows\System32
Solution 12 - Php
Save CLI phpinfo output into local file:
php -i >> phpinfo-cli.txt
Then open the file and find row Loaded Configuration File
. It will contain path to actually loaded php.ini
file eg.
Loaded Configuration File => D:\wamp\bin\php\php7.4.1\php.ini
Note, that PHP may load different php.ini
file for CLI mode and another for HTTP mode.
Solution 13 - Php
In a Docker container, "phpmyadmin/phpmyadmin". there isn't any php.ini file. But there are two files: php.ini-debug and php.ini-production.
To solve the problem, simply rename one of the files to php.ini and restart the Docker container.
Solution 14 - Php
On Linux it is usually under /usr/bin/php
To find php.ini loaded in CLI on widows, run:
php.exe -i | grep "php.ini"
Ps. You can localize PHP installation folder with:
which php
or
whereis php
> /c/laragon/bin/php/php-7.4.19-Win32-vc15-x64/php
Solution 15 - Php
There is no php.ini used by the command line. You have to copy the file from ...EasyPHP-<<version>>\apache\php.ini
to ...EasyPHP-<<version>>\php\php.ini
and then edit the one in the php directory.
Reference: