我正在重新开始 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/somedatestamp/extension.so) 来解决这个问题,但我宁愿不必这样做。所以:
- (我很确定这个问题的答案是"is",但只是为了确定):服务器是否只是扫描 conf.d 文件夹并尝试加载任何扩展。所以在每个 ext 中都有描述-extension.so 找到的文件?
- 如何为我的 PHP 配置设置 $PATH 的等价物? phpinfo() 引用了一个 extension_dir 变量,并将值作为/usr/local/Cellar/php@7.1/7.1.20/lib/php/20160303,并且在 php.ini 中设置了一个 extension_dir 变量,但它被注释掉了。那么 PHP 从哪里获取它通过 phpinfo() 显示的值,是否可以指定 PHP 将在其中查找扩展的多个目录?
最佳答案
- 服务器不会自动扫描
*.so
文件,它会加载extension=extension.so
和zend_extension=extension 中的 php 配置文件中提到的扩展.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 配置中的值相同
pecl config-get ext_dir
完成这些步骤后,您可以检查是否使用命令加载了扩展
php -m
它列出了所有加载的 php 模块和扩展。如果配置文件中提到了某些扩展但无法加载,您将收到警告。
关于php - php.ini 中 PHP 扩展的默认路径是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51907286/