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

如何查找命令行使用的php.ini文件?,php,easyphp,Php,Easyphp,我需要在EasyHP环境中启用pdo_mysql,因此我转到php.ini文件并取消注释以下行: extension=php_pdo_mysql.dll 不幸的是,我仍然有同样的问题。 我正在使用CLI,所以我想我需要找到CLI使用的php.ini文件。如何找到它?您可以使用以下方法获得完整的phpinfo(): php -i 在这里,使用了php.ini文件: $ php -i | grep 'Configuration File' Configuration File (php.ini

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

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

您可以使用以下方法获得完整的
phpinfo()

php -i 
在这里,使用了
php.ini
文件:

$ php -i | grep 'Configuration File'
Configuration File (php.ini) Path => /etc
Loaded Configuration File => /etc/php.ini
在Windows上,请改为使用:


从我使用EasyHP时的记忆来看,php.ini文件位于
C:\Windows\
C:\Windows\System32

中,您可以用于: 要检查系统是否正在使用配置文件,请尝试检索cfg\u file\u path配置设置的值。与phpinfo()不同的是,它会告诉您是否根本没有找到/使用php.ini

var_dump( get_cfg_var('cfg_file_path') );
你可以简单地。您使用的是命令行版本,因此使用
-c
参数可以指定位置,例如

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

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

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

只需运行
php--ini
,并在输出中查找
加载的配置文件
,查找php.ini文件中CLI使用的
php.ini
,设置扩展目录,例如:

extension_dir = "C:/php/ext/"

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

有时候,在配置文件中,情况并不总是像看上去的那样。所以在这里,我应用我通常的方法来探索进程打开了哪些文件

我使用了一个非常强大和有用的命令行程序,名为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

命令行没有使用php.ini。您必须将文件从
…EasyPHP-\apache\php.ini
复制到
…EasyPHP-\php\php.ini
,然后编辑php目录中的文件

参考:

在终端中运行
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

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

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

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

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

在OSX小牛上运行:

$ 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.default
复制到
php.ini
,将
date.timezone=“US/Central”
添加到顶部(就在
[php]
的正下方),问题就解决了

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

find / -type f -name "php.ini" 
这将输出名为
php.ini
的所有文件


找出您使用的是哪一个,通常是
apache2/php.ini

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

php -i >> phpinfo-cli.txt

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

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

现在最简单的方法是使用php配置:

# php-config --ini-dir
/usr/local/etc/php/7.4/conf.d

你可以在那里找到更多。
--help
子命令(macOS本地安装)的输出示例:


对,它告诉我C:\WINDOWS。但我并没有认真地在那里找到它!然后这个php实例除了默认值之外,根本没有使用php.ini。phpinfo()的
配置文件
行显示了php最后一次查找ini文件的位置。这可能是它找到这样一个文件的地方,也可能是最后一个选项,在windows上恰好是%SYSTEMROOT%。@pascal:
php-i | find“Configuration file”
应该可以在windows上使用。肯定没有grep强大,但是
find
将为您执行基本的字符串搜索。当然,如果php-i将其输出转储到stderr,则可能是SOL。
find
默认情况下区分大小写,因此它必须是完美的(
php-i | find“Configuration File”
)或不区分大小写(
php-i | find/i“Configuration File”
-注意
/i
标志)考虑添加<代码> PHP——INI < /代码>作为备选方案;从PHP 5.2.3开始提供:)没有人提到,可以通过调用@Mchl从脚本中获取该值,需要时我会投票给你,但我认为你应该在行中用grep发布答案。@BradFJacobs现在是跨平台的,为什么要使用grep?@AntonyD'Andrea:这正是问题所在。看见甚至在标题中也有这样的说明:如何找到命令行使用的php.ini文件?@ninecatotorules如果您的cli php使用Apache的php.ini,那么您的setup@Mchl:我已经厚颜无耻地编辑了你的答案,在输出中包含了不查找
加载的配置文件的信息:)
php-I
给我的结果不正确,但这一个非常好。非常感谢。另请参见@sjas,因为它不是错误的,它是正确的,并让您知道在cli中加载的php.ini的路径。如果没有php.ini文件(某些docker容器),这将不起作用。因此,公认的答案更合适。事实上,macOS(以及之前的OSX)从不提供
php.ini
文件,而是依赖php开发人员做出明智的默认选择(通常是这样)。但是如果你需要改变任何设置,你必须完全按照你描述的去做。
# php-config --ini-dir
/usr/local/etc/php/7.4/conf.d
# php-config --help
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]