32

在网络服务器上运行的 php 和 CLI 版本没有使用相同的 php.ini 文件。如果我执行命令php --ini,它会显示这个

Configuration File (php.ini) Path: C:\Windows
Loaded Configuration File:         C:\wamp\bin\php\php5.3.8\php.ini
Scan for additional .ini files in: (none)
Additional .ini files parsed:      (none)

而我的网络版本使用C:\wamp\bin\apache\Apache2.2.21\bin\php.ini. 这对于使用 wamp 的人来说可能很常见。

如何更改加载的配置文件以读取,C:\wamp\bin\apache\Apache2.2.21\bin\php.ini这样我就不必维护 2 个不同的 php.ini 版本?

4

5 回答 5

27

http://php.net/configuration.file

在这些位置搜索 php.ini(按顺序):

  • SAPI 模块特定位置(Apache 2 中的 PHPIniDir 指令,CGI 和 CLI 中的 -c 命令行选项,NSAPI 中的 php_ini 参数,THTTPD 中的 PHP_INI_PATH 环境变量)
  • PHPRC 环境变量。在 PHP 5.2.0 之前,这是在下面提到的注册表项之后检查的。
  • 从 PHP 5.2.0 开始,可以为不同版本的 PHP 设置 php.ini 文件的位置。按顺序检查以下注册表项:
    • [HKEY_LOCAL_MACHINE\SOFTWARE\PHP\xyz]、[HKEY_LOCAL_MACHINE\SOFTWARE\PHP\xy] 和 [HKEY_LOCAL_MACHINE\SOFTWARE\PHP\x],其中 x、y 和 z 表示 PHP 主要、次要和发布版本。如果在这些键中的任何一个中存在 IniFilePath 的值,则找到的第一个将用作 php.ini 的位置(仅限 Windows)。
    • [HKEY_LOCAL_MACHINE\SOFTWARE\PHP],IniFilePath 的值(仅限 Windows)。
  • 当前工作目录(CLI 除外)。
  • Web 服务器的目录(用于 SAPI 模块)或 PHP 目录(否则在 Windows 中)。
  • Windows 目录(C:\windows 或 C:\winnt)(对于 Windows),或 --with-config-file-path 编译时选项。

对于 CLI,您最好的选择可能是为$PHPRC将要执行脚本的帐户设置环境变量,或者使用不同的--with-config-file-path配置设置重新编译 PHP。

您还可以通过-c在调用 PHP 时指定选项来覆盖每次执行的 php.ini 搜索目录:

> php --帮助
用法:php [options] [-f] [--] [args...]
...
  -c | 在此目录中查找 php.ini 文件

于 2012-06-01T05:22:59.260 回答
14

通过指定环境变量 PHPRC 指向与 Apache 在 Ubuntu 上为我工作的 php.ini 相同的 php.ini

export PHPRC=/etc/php5/apache2/php.ini

或者放到$HOME/.bashrc中每次cli启动时导入

于 2014-10-15T17:23:23.110 回答
3

我尝试使用 C:\YourPathto\PHP7\ 作为我的 PHPRC 环境变量,但失败了。但它必须设置为带有文件名的完整路径。我还发现我必须完全重启 php 才能获取新变量。

  1. 在 Windows 上,找到 php.ini 文件的路径,然后在命令窗口中修改并运行以下命令:

    setx PHPRC "C:\YourPathto\PHP7\php.ini"

    你应该看到SUCCESS: Specified value was saved.

  2. 然后重新启动您的计算机(真的)。

或者通过常规方式编辑环境变量,然后重启:

PHPRC 环境变量设置为 C:\YourPathto\PHP7\php.ini

于 2019-11-01T05:30:10.287 回答
2

我花了大约 3 个小时试图完全按照您的问题进行操作。做不到。我放弃并将 php.ini 复制到 C:\Windows 并将我的 ENV 变量“PHPRC”更改为 C:\Windows(和 httpd.conf)。这样我的 CLI php 和 Apache php e 都使用同一个文件。在我进行此更改之前,我无法让“php -m”显示我在 php.ini 中加载的模块。

于 2012-06-15T22:00:17.963 回答
0

尝试phpinfo()在两侧运行该功能

网络服务器和 CLI 并找出php.ini双方文件的确切位置

并仅维护这些文件

于 2012-06-01T05:14:16.573 回答