【问题标题】:How can I find the php.ini file used by the command line?如何找到命令行使用的 php.ini 文件?
【发布时间】:2011-02-14 14:06:06
【问题描述】:

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

extension=php_pdo_mysql.dll

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

【问题讨论】:

  • @sjas 没错,没错,让你知道cli中加载的php.ini的路径。
  • EasyPHP(可能)暗示Windows。也许这样标记它?
  • Some context: "问题的根本原因是在 EasyPHP 5.3 中没有任何 php.ini php 文件夹中的文件。

标签: php easyphp


【解决方案1】:

只需运行 php --ini 并在输出中查找 Loaded Configuration File 以查找 CLI 使用的 php.ini 的位置。

【讨论】:

  • @Mchl 我会支持你,但我认为你应该在行中用 grep 发布答案。
  • @BradFJacobs 为什么现在跨平台使用 grep?
  • @AntonyD'Andrea:这正是问题所在。看?即使在标题中也确实如此说明:如何找到 命令行使用的 php.ini 文件?
  • @NineCattoRules 如果你的 cli php 使用 Apache 的 php.ini 你的设置有问题
  • @Mchl:我无耻地编辑了您的答案,以包含不要在输出中查找 Loaded Configuration File 的信息:)
【解决方案2】:

您可以使用以下方式获得完整的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"

【讨论】:

  • 那么这个 php 实例根本没有使用 php.ini,而是使用了默认值。 phpinfo() 的Configuration File 行显示了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 起可用 :)
  • 没有人提到,可以通过调用 php_ini_loaded_file 并在需要时从脚本中获取该值 php_ini_scanned_files
【解决方案3】:

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

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

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

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

【讨论】:

  • 是否永久更改?您能在回答中明确说明这一点吗?
【解决方案4】:

在您的终端中运行php --ini,您将获得有关 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。它将显示所有可能的选项。

【讨论】:

    【解决方案5】:

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

    我使用一个名为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 -i 给了我不正确的结果,但是这个完全没问题。谢谢!
    【解决方案6】:

    OS X v10.9(小牛队)上,正在运行:

    $ 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]的正下方),问题就解决了。

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

    【讨论】:

    • 确实,macOS(以及之前的 OSX)从不发布 php.ini 文件,并依赖 PHP 开发人员做出明智的默认选择(通常是这种情况)。但是,如果您需要更改任何设置,则必须完全按照您所描述的进行。这实际上节省了大量时间,因为大多数用户永远不需要“修复”他们的 php.ini 文件......
    【解决方案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
    

    【讨论】:

      【解决方案8】:

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

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

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

      【讨论】:

        【解决方案9】:

        如果对大家有帮助,试试这个:

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

        这将输出所有名为php.ini的文件。

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

        【讨论】:

        • 如果没有 php.ini 文件(一些 docker 容器),这将不起作用。因此,接受的答案更适合。
        • 没有。 apache2/php.ini 通常不被 CLI 使用
        【解决方案10】:

        我记得以前使用 EasyPHP 时,php.ini 文件在C:\Windows\C:\Windows\System32

        【讨论】:

        • 是的,它告诉我 C:\WINDOWS。但我并没有认真地在那里找到它!
        【解决方案11】:

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

        php-config --ini-dir
        

        输出:

        /usr/local/etc/php/7.4/conf.d
        

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

        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]
        

        【讨论】:

        • 这对 EasyPHP 有效吗?它是特定于 Windows 的。
        • @PeterMortensen 我不知道 EasyPHP 是什么。 php-config 命令特定于发行版和 PHP 版本。+
        【解决方案12】:

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

        php -i >> phpinfo-cli.txt
        

        然后打开文件并找到行Loaded Configuration File。它将包含实际加载的php.ini 文件的路径,例如。

        Loaded Configuration File => D:\wamp\bin\php\php7.4.1\php.ini
        

        请注意,PHP 可能会为 CLI 模式加载不同的 php.ini 文件,而为 HTTP 模式加载另一个文件。

        【讨论】:

        • 如何回答这个问题?你能详细说明吗?请通过editing (changing) your answer 回复,而不是在 cmets 中(without "Edit:"、"Update:" 或类似的 - 答案应该看起来像是今天写的)。
        • @PeterMortensen 抱歉,我认为这很明显。答案已更新。
        【解决方案13】:

        在 Docker 容器中,phpmyadmin/phpmyadmin。没有任何 php.ini 文件。但是有两个文件:php.ini-debugphp.ini-production

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

        【讨论】:

        • 你有那个 Docker 容器/镜像的参考,"phpmyadmin/phpmyadmin"
        【解决方案14】:

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

        参考:

        【讨论】:

        • 最好引用出处:"问题的根本原因是EasyPHP 5.3中没有 php.ini php 文件夹中的文件。"
        猜你喜欢
        • 2011-09-03
        • 2017-07-27
        • 1970-01-01
        • 2019-09-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多