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

标签 php server configuration

我正在重新开始 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) 来解决这个问题,但我宁愿不必这样做。所以:

  1. (我很确定这个问题的答案是"is",但只是为了确定):服务器是否只是扫描 conf.d 文件夹并尝试加载任何扩展。所以在每个 ext 中都有描述-extension.so 找到的文件?
  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 将在其中查找扩展的多个目录?

最佳答案

  1. 服务器不会自动扫描 *.so 文件,它会加载 extension=extension.sozend_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

  1. 你应该在你的 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/

相关文章:

php - 重置 cs 购物车管理员密码

javascript - 错误 [ERR_HTTP_HEADERS_SENT] : Cannot set headers after they are sent to the client (multiple data entries)

testing - 在 WebStorm 中运行 TestCafe 需要什么配置

java - 使用外部配置文件配置log4j日志级别

java - Spring Security UserMap 已弃用,如何使用普通 map ?

php - 简单查询中的mysql数据插入问题

PHP:json_encode() 不显示多维数组的任何内容

php - mysqli 准备语句失败且没有错误

java - 如何在 Jersey 中为带或不带正文的 POST 请求创建端点

mysql - 错误 1064 : Syntax Error MySQL