php-fpm:禁用特定池的php扩展

时间:2017-10-03 09:51:32

标签: php mysql fpm

我已在www.conf中配置了一个新的FPM池(配置文件pool.d),现在让我们说我想禁用该特定池的mysql支持?或者有可能加载该池的扩展名?

我使用的是debian 9,文件结构如下所示:

/etc/php/7.0/fpm$ tree
.
├── conf.d
│   ├── 10-mysqlnd.ini -> /etc/php/7.0/mods-available/mysqlnd.ini
│   ├── 10-opcache.ini -> /etc/php/7.0/mods-available/opcache.ini
│   ├── 10-pdo.ini -> /etc/php/7.0/mods-available/pdo.ini
│   ├── 20-calendar.ini -> /etc/php/7.0/mods-available/calendar.ini
│   ├── 20-ctype.ini -> /etc/php/7.0/mods-available/ctype.ini.ini
(...)
├── php-fpm.conf
├── php.ini
└── pool.d
    ├── forgewww.conf
    └── www.conf

extension=thing.so可以在文件conf.d/<extension>.ini中找到。问题是所有这些扩展一旦配置似乎对所有池都是通用的......

我还尝试使用phpdismod全局禁用mysql扩展,然后在www.conf中附加一行:

php_admin_value[extension] = mysqli.so

哪个似乎不起作用(上面没有为该池启用mysqli)

1 个答案:

答案 0 :(得分:0)

您无法为每个池加载不同的扩展名,扩展名在.ini文件中定义,由主进程加载。 php-fpm主进程分叉进入子进程,这意味着它们共享主进程加载的内容。在分叉或卸载它们之后,您无法让孩子加载不同的扩展集。可能有可能开发出一种解决方案,但实际上并不需要通过不同的方法来解决您的问题。

为了实现您的目标,只需在不同的端口/ unix套接字上设置完全不同的php-fpm进程并加载您需要的扩展程序,设置您的池并完成。它实际上比听起来要少得多,它可能不会花费你几分钟。