php.ini 中 PHP 扩展的默认路径是什么?

Jim*_*Jim 1 php configuration server

我正在重新进行 Web 开发,因此决定使用自制软件从头开始重新安装我的 Mac 开发环境(我正在关注https://getgrav.org/blog/macos-sierra-apache-multiple 上的教程- php-versions这可能是我读过的关于该主题的最佳教程)。

除了使用 PECL 安装像 APCU 和 Xdebug 这样的扩展之外,一切都很顺利。我想我可以让扩展以一种有点hacky的方式工作,但我宁愿正确地理解这里发生了什么。

我的 php.ini 文件位于 /usr/local/etc/php/7.1/php.ini。当 PECL 安装扩展时,它似乎在 [PHP] 行上方的 php.ini 顶部添加了一行,例如:

1 zend_extension="xdebug.so"
2 extension="apcu.so"
3 [PHP]
4 
5 ;;;;;;;;;;;;;;;;;;;
6 ; About php.ini   ;
7 ;;;;;;;;;;;;;;;;;;;
8 ; PHP's initialization file, generally called php.ini, is responsible for
9 ; configuring many of the aspects of PHP's behavior.
Run Code Online (Sandbox Code Playgroud)

本教程建议转到 /usr/local/etc/php/7.1/conf.d/ 并为每个扩展创建单独的配置文件。即,php.ini 中的第 1 行和第 2 行将被删除,并且 /usr/local/etc/php/7.1/conf.d/ext-apcu.ini 和 /usr/local/etc/php/7.1/conf.d /ext-xdebug.ini 将被创建,每个扩展的配置设置都包含在相关的 ext-xx.ini 文件中。

在 php.ini 中引用扩展的默认 PECL 方法和为每个扩展使用 ext-xx.ini 文件的推荐方法似乎都无法成功加载扩展。我可以通过指定扩展的路径(/usr/local/lib/php/pecl/somedatestamp/extension.so)来解决这个问题,但我宁愿不必这样做。所以:

  1. (我很确定这个问题的答案是“是”,但可以肯定的是):服务器是否只是扫描 conf.d 文件夹并尝试加载每个扩展名中描述的任何扩展名。它找到了这样的文件?
  2. 如何为我的 PHP 配置设置等效的 $PATH?phpinfo() 引用了一个 extension_dir 变量,并给出了 /usr/local/Cellar/php@7.1/7.1.20/lib/php/20160303 的值,并且在 php.ini 中设置了一个 extension_dir 变量,但它被注释掉了。那么 PHP 在哪里获取它通过 phpinfo() 显示的值,是否可以指定多个目录,PHP 将在其中查找扩展?

Kar*_*rim 6

  1. 服务器不会*.so自动扫描文件,它会加载 php 配置文件中提到的扩展名extension=extension.sozend_extension=extension.so配置。要检查服务器启动期间加载的所有配置文件,请运行命令php --ini,我的示例输出是:
$ php --ini
Configuration File (php.ini) Path: /usr/local/etc/php/7.1
Loaded Configuration File:         /usr/local/etc/php/7.1/php.ini
Scan for additional .ini files in: /usr/local/etc/php/7.1/conf.d
Additional .ini files parsed:      /usr/local/etc/php/7.1/conf.d/ext-opcache.ini,
/usr/local/etc/php/7.1/conf.d/ext-phalcon.ini,
/usr/local/etc/php/7.1/conf.d/ext-xdebug.ini,
/usr/local/etc/php/7.1/conf.d/php-memory-limits.ini
Run Code Online (Sandbox Code Playgroud)

在您的情况下,看起来您的版本可能混乱:您的配置文件位于/usr/local/etc/php/7.1/php.ini(7.1 版)中,但您正尝试将其他配置文件放入/usr/local/etc/php/5.6/conf.d/(5.6 版)中。尝试将它们放入/usr/local/etc/php/7.1/conf.d

  1. 您应该在 php.ini 中指定扩展目录路径,我有值
extension_dir = "/usr/local/lib/php/pecl/20160303"
Run Code Online (Sandbox Code Playgroud)

此值对 php 版本 7.1 有效,时间戳 20160303 指定扩展的 PHP API 版本。您还可以使用以下命令检查扩展目录的 PECL 配置是否与 php config 中的值相同

pecl config-get ext_dir
Run Code Online (Sandbox Code Playgroud)

完成这些步骤后,您可以检查扩展是否已使用命令加载

php -m
Run Code Online (Sandbox Code Playgroud)

它列出了所有加载的 php 模块和扩展。如果在配置文件中提到了某些扩展但无法加载,您将收到警告。