How to find the php.ini file used by the command line?
Question
I need to enable pdo_mysql in my EasyPhp environment, so I went to 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?
Solution
Just run php --ini
and look for Loaded Configuration File
in output for the location of php.ini
used by your CLI
OTHER TIPS
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
instead:
php -i|find/i"configuration file"
php --ini
will give you all the details details on the uses path and possible ini file(s)
You can use get_cfg_var('cfg_file_path') 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 set the location of the php.ini. You're using the command line version, so using the -c
parameter you can specifiy the location, e.g.
php -c /home/me/php.ini -f /home/me/test.php
Run php --ini
in your terminal, you'll get all details about ini files
[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
For more, use helping command php --help
It'll display all the possible options.
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"
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
Somtimes things aren't always as they seem when in comes to config 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 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
On OSX 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.)
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
)
From what I remember when I used to use EasyPHP, the php.ini file is either in C:\Windows\
or C:\Windows\System32
In your php.ini file set your extension directory, e.g:
extension_dir = "C:/php/ext/"
You will see in you PHP folder there is an ext folder with all the dll's and extensions.
Do
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
Save CLI phpinfo output into local file:
php -i >> phpinfo-cli.txt
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
than edit the one in php directory
Reference: