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

Amo*_*tir 366 php easyphp

我需要在我的EasyPhp环境中启用pdo_mysql,所以我去了php.ini文件并取消注释以下行:

extension=php_pdo_mysql.dll
Run Code Online (Sandbox Code Playgroud)

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

Mch*_*chl 908

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

  • @BradFJacobs为什么在现在跨平台时使用grep? (8认同)
  • @Mchl我会赞成你,但我认为你应该用grep发布答案. (5认同)
  • @AntonyD'Andrea:这正是问题所在。看?它甚至在标题中也说明了这一点:How to find the php.ini file used by the _command line_? (2认同)
  • @NineCattoRules 如果您的 cli php 使用 Apache 的 php.ini,则您的设置有问题 (2认同)

Pas*_*TIN 359

你可以得到一个完整的phpinfo()使用:

php -i 
Run Code Online (Sandbox Code Playgroud)

并且,在那里,有php.ini使用的文件:

$ php -i | grep 'Configuration File'
Configuration File (php.ini) Path => /etc
Loaded Configuration File => /etc/php.ini
Run Code Online (Sandbox Code Playgroud)

在Windows上使用find:

php -i|find/i"configuration file"
Run Code Online (Sandbox Code Playgroud)

  • 然后这个php实例除了默认值之外根本不使用php.ini.phpinfo()的`Configuration File`行显示了php查找ini文件的最后位置.这可以是它找到这样一个文件的地方,也可以是在Windows上碰巧是%SYSTEMROOT%的最后一个选项. (12认同)
  • 考虑添加`php --ini`作为替代; 从PHP 5.2.3起可用:) (9认同)
  • @pascal:`php -i | 找到"配置文件"`应该适用于Windows.绝对没有grep那么强大,但`find`会为你做基本的字符串搜索.当然,如果php -i将其输出转储到stderr,那么你可能是SOL. (2认同)
  • `find`是区分大小写的默认,所以它必须是完美的(`PHP -i |找到"配置文件"`)或由不区分大小写(`PHP -i |找到/我"配置文件"` - 记`/ i`标志). (2认同)
  • 没人提到,通过调用[php_ini_loaded_file](http://www.php.net/manual/en/function.php-ini-loaded-file.php)并在需要时可以从脚本获取该值[php_ini_scanned_files] (http://www.php.net/manual/en/function.php-ini-scanned-files.php) (2认同)

小智 32

php --ini
Run Code Online (Sandbox Code Playgroud)

将为您提供有关使用路径和可能的ini文件的所有详细信息


Vol*_*erK 15

您可以使用get_cfg_var('cfg_file_path'):

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

var_dump( get_cfg_var('cfg_file_path') );
Run Code Online (Sandbox Code Playgroud)

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

php -c /home/me/php.ini -f /home/me/test.php
Run Code Online (Sandbox Code Playgroud)


Sat*_*ish 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
Run Code Online (Sandbox Code Playgroud)

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


Ree*_*e45 7

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

php -i | grep "\.ini"
Run Code Online (Sandbox Code Playgroud)

有些系统从多个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
Run Code Online (Sandbox Code Playgroud)


tho*_*ter 7

有些事情并不总是像他们在配置文件时所看到的那样.所以我在这里应用我常用的方法来探索一个进程打开的文件.

我使用一个非常强大且有用的命令行程序strace来向我展示我背后真正发生的事情!

$ strace -o strace.log php --version
$ grep php.ini strace.log
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)


Mik*_*osh 6

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

php --ini | grep Loaded | cut -d" " -f12
Run Code Online (Sandbox Code Playgroud)

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


Mik*_*iLL 6

在OSX Mavericks上,运行:

$ php -i | grep 'Configuration File'
Run Code Online (Sandbox Code Playgroud)

回:

Configuration File (php.ini) Path => /etc
Loaded Configuration File:         (none)
Run Code Online (Sandbox Code Playgroud)

/etc/目录中是:

php.ini.default
Run Code Online (Sandbox Code Playgroud)

(以及php-fpm.conf.default)

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

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

  • 事实上,macOS(以及之前的 OSX)从未发布过“php.ini”文件,而是依赖 PHP 开发人员做出合理的默认选择(通常是这种情况)。但如果您需要_更改_任何设置,则必须完全按照您所描述的进行操作。这实际上节省了大量时间,因为大多数用户永远不需要“修复”他们的“php.ini”文件...... (2认同)

kai*_*ser 6

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

\n
php-config --ini-dir\n
Run Code Online (Sandbox Code Playgroud)\n

输出:

\n
/usr/local/etc/php/7.4/conf.d\n
Run Code Online (Sandbox Code Playgroud)\n
\n

您还可以在那里找到更多内容。子--help命令(macOS 本地安装):

\n
php-config --help\n
Run Code Online (Sandbox Code Playgroud)\n

输出:

\n
Usage: /usr/local/bin/php-config [OPTION]\nOptions:\n  --prefixUsage: /usr/local/bin/php-config [OPTION]\nOptions:\n  --prefix            [/usr/local/Cellar/php/7.4.11]\n  --includes          [-I/usr/local/Cellar/php/7.4.11/include/php - \xe2\x80\xa6ETC\xe2\x80\xa6]\n  --ldflags           [ -L/usr/local/Cellar/krb5/1.18.2/lib -\xe2\x80\xa6ETC\xe2\x80\xa6]\n  --libs              [ -ltidy -largon2 \xe2\x80\xa6ETC\xe2\x80\xa6 ]\n  --extension-dir     [/usr/local/Cellar/php/7.4.11/pecl/20190902]\n  --include-dir       [/usr/local/Cellar/php/7.4.11/include/php]\n  --man-dir           [/usr/local/Cellar/php/7.4.11/share/man]\n  --php-binary        [/usr/local/Cellar/php/7.4.11/bin/php]\n  --php-sapis         [ apache2handler cli fpm phpdbg cgi]\n  --ini-path          [/usr/local/etc/php/7.4]\n  --ini-dir           [/usr/local/etc/php/7.4/conf.d]\n  --configure-options [--prefix=/usr/local/Cellar/php/7.4.11 --\xe2\x80\xa6ETC\xe2\x80\xa6]\n  --version           [7.4.11]\n  --vernum            [70411]\n
Run Code Online (Sandbox Code Playgroud)\n