首页 > 解决方案 > php.ini 中 PHP 扩展的默认路径是什么?

问题描述

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

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

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

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.

本教程建议转到 /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/somedatesamp/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 将在其中查找扩展的多个目录?

标签: phpserverconfiguration

解决方案


  1. 服务器不会自动扫描文件,它会加载 php 配置文件和配置*.so中提到的扩展名。要检查在服务器启动期间加载的所有配置文件,请运行命令,我的示例输出是:extension=extension.sozend_extension=extension.sophp --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

在您的情况下,看起来您可能有混乱的版本:您的配置文件位于/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"

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

pecl config-get ext_dir

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

php -m

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


推荐阅读