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

时间:2018-08-18 09:43:04

标签: 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]行上方的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.

本教程建议转到/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文件夹并尝试加载任何extension.so,所以每个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 个答案:

答案 0 :(得分:1)

  1. 服务器不会自动扫描*.so文件,它会以extension=extension.sozend_extension=extension.so配置加载php配置文件中提到的扩展名。要检查服务器启动期间加载的所有配置文件,请运行命令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 config中的值相同。
pecl config-get ext_dir

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

php -m

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