php - 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)来解决这个问题,但我宁愿不必这样做。所以:
- (我很确定这个答案是“是”,但只是为了确定):服务器是否只是扫描 conf.d 文件夹并尝试加载任何扩展名。所以每个扩展名中都有描述。所以它找到的文件?
- 如何为我的 PHP 配置设置相当于 $PATH 的值?phpinfo() 引用了一个 extension_dir 变量,并给出了 /usr/local/Cellar/php@7.1/7.1.20/lib/php/20160303 的值,并且在 php.ini 中设置了一个 extension_dir 变量,但它被注释掉了。那么 PHP 从哪里获取它通过 phpinfo() 显示的值,是否可以指定 PHP 将在其中查找扩展的多个目录?
解决方案
- 服务器不会自动扫描文件,它会加载 php 配置文件和配置
*.so
中提到的扩展名。要检查在服务器启动期间加载的所有配置文件,请运行命令,我的示例输出是:extension=extension.so
zend_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
在您的情况下,看起来您可能有混乱的版本:您的配置文件位于/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
- 你应该在你的 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 模块和扩展。如果配置文件中提到了某些扩展名但无法加载,您将收到警告。
推荐阅读
- c# - 为什么添加 Mesh Collider 会使 Inverse Kinematic 腿打乱他们的运动?
- python - 即使我设置种子变量,为什么 TensorFlow 会产生不同的输出?
- java - 使用什么正确的设计模式
- ffmpeg - ffmpeg 复制图像叠加(将其放置两次到输出)
- python - 为复杂的生态模型优化 dask
- c++ - 为什么 CLion 不显示异常?
- python - Jupyter Notebook:强制 cookie 过期并重置令牌
- java - 如何使用带有 Spring Security 5.2.x 的 WebClient 创建 Feign Oauth2RequestIntercetor?
- openapi - OpenAPI 不扫描外部库?
- php - Laravel 5.5 config() 不显示数据