如何找到命令行使用的php.ini文件?


389

我需要在EasyPhp环境中启用pdo_mysql,因此转到php.ini文件并取消注释以下行:

extension=php_pdo_mysql.dll

不幸的是我仍然有同样的问题。我正在使用CLI,所以我想我需要找到CLI使用的php.ini文件。我如何找到它?



@sjas没错,它是正确的,并且让您知道cli中已加载的php.ini的路径。
SaidbakR

Answers:


951

只需运行php --iniLoaded Configuration File在输出中查找php.iniCLI 所使用的位置


5
@Mchl我会投票给您,但是我认为您应该在行中用grep发布答案。
Jim W.

9
@BradFJacobs为什么现在跨平台使用grep?
Garet Claborn 2014年

但这不只是向您显示通过CLI使用PHP时加载的代码(因为您正在从中运行命令)。
安东尼·安德里亚

1
@ AntonyD'Andrea:这正是问题所在。看到?即使标题中也有这样的说明:如何找到命令行使用的php.ini文件?
Mchl,2015年

这不是我的答案...在我的情况下,我键入 sudo find / -iname php.ini并找到/etc/php/7.0/apache2/php.ini了未被(php --iniphp -i | grep php.ini两者都找到/etc/php/7.0/cli/php.ini)的机器的正确php.ini配置文件的正确位置
NineCattoRules

366

您可以phpinfo()使用来获得完整的信息:

php -i 

并且,在其中有php.ini使用的文件:

$ php -i | grep 'Configuration File'
Configuration File (php.ini) Path => /etc
Loaded Configuration File => /etc/php.ini

在Windows上,请find改用:

php -i|find/i"configuration file"

12
然后,此php实例仅使用默认值,而不使用php.ini。Configuration Filephpinfo()这一行显示了php查找ini文件的最后一个地方。可以是找到此类文件的位置,也可以是Windows上的最后一个选项恰好是%SYSTEMROOT%。
VolkerK 2010年

2
@pascal:php -i | find "Configuration file"应该在Windows上工作。绝对不如grep强大,但find可以为您进行基本的字符串搜索。当然,如果php -i将其输出转储到stderr,则可能是SOL。
Marc B

2
find默认情况下区分大小写,因此它必须是完美(php -i | find "Configuration File")或不区分大小写(php -i | find /i "Configuration file"-注意/i标志)。
deizel 2011年

9
考虑添加php --ini作为替代方案;可用自PHP 5.2.3 :)
杰克

2
没有人提到,可以通过调用php_ini_loaded_file和需要时的php_ini_scanned_files
Radek Benkel 2012年

16

您可以为此使用get_cfg_var('cfg_file_path')

要检查系统是否正在使用配置文件,请尝试检索cfg_file_path配置设置的值。如果可用,则使用配置文件。
与phpinfo()不同,它将告诉它是否根本没有找到/使用php.ini。

var_dump( get_cfg_var('cfg_file_path') );

您可以简单地设置 php.ini的位置。您使用的是命令行版本,因此使用-c参数可以指定位置,例如

php -c /home/me/php.ini -f /home/me/test.php

13

php --ini在您的终端中运行,您将获得有关ini文件的所有详细信息

[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

有关更多信息,请使用帮助命令,php --help它将显示所有可能的选项。


8

一般而言,配置文件有时并不总是像看起来那样。所以在这里,我将使用我通常的方法来探索某个进程打开的文件。

我使用了一个非常强大且有用的命令行程序strace,向我展示了背后的真实情况!

$ strace -o strace.log php --version
$ grep php.ini strace.log

Strace挖掘出程序进行的内核(系统)调用,并将输出转储到-o指定的文件中

使用grep在此日志中搜索是否存在php.ini 很容易。查看以下典型响应以了解发生了什么是很明显的。

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

1
php -i给了我不正确的结果,但是这一点很好。谢谢!
德米特里·金斯堡2015年

7

如果要加载所有配置文件,这将告诉您:

php -i | grep "\.ini"

一些系统从多个ini文件中加载内容。在我的ubuntu系统上,它看起来像这样:

$  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

6

在OSX Mavericks上,运行:

$ php -i | grep 'Configuration File'

回:

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

/etc/目录中是:

php.ini.default

(以及php-fpm.conf.default

我能够复制php.ini.defaultphp.ini,添加date.timezone = "US/Central"到顶部(在下方[php]),问题已解决。

(至少错误消息消失了。)


5

如果您需要将其传递给另一个应用程序,则可以执行以下操作:

php --ini | grep Loaded | cut -d" " -f12

仅返回路径。php -c $(php --ini | grep Loaded | cut -d" " -f12)将传入配置文件(对有用fpm


3

记得我以前使用EasyPHP时,php.ini文件位于C:\Windows\或中。C:\Windows\System32


2
正确,它告诉我C:\ WINDOWS。但是我没有认真找到它!
Amokrane Chentir'5

2

find / -type f -name "php.ini" 

这将输出所有名为 php.ini

找出您正在使用的那个 apache2/php.ini


如果没有php.ini文件(某些Docker容器),则此方法不起作用。因此,可接受的答案更适合。
Manuel Manhart

myyyyyyyyyyy男人
doc假日

@emilioestevez * woman
willsmanley

1

在您的php.ini文件中,设置您的扩展目录,例如:

extension_dir = "C:/php/ext/"

您将在PHP文件夹中看到一个ext文件夹,其中包含所有dll和扩展名。


0

将CLI phpinfo输出保存到本地文件中:

php -i >> phpinfo-cli.txt

0

在docker容器phpmyadmin / phpmyadmin中没有php.ini文件。但是有两个文件:php.ini-debug和php.ini-production

要解决该问题,只需将文件之一重命名为php.ini并重新启动docker容器。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.