4

对各位大师来说,PHP 中是否有任何隐藏的宝石可以在运行时卸载特定的扩展?

4

3 回答 3

3

不,这是不可能的,而且很可能永远不会:

[2011-02-08 11:34 UTC] rasmus@php.net
按请求卸载扩展从性能的角度来看根本不可行。而且您显然不能为下一个请求卸载并让它卸载,因为下一个请求可能是针对期望扩展存在的页面。

但是,dl()无论如何都不鼓励使用 - 在最近的版本中,它仅在 CLI 版本中可用。

于 2012-05-23T08:11:16.980 回答
1

从另一个角度来看:不可能从正在运行的 PHP 解释器中删除扩展,因为它可能以不可逆的方式修改了 PHP 解释器的状态。例如,许多扩展在加载时注册类;这些模块中没有代码可以在卸载时取消注册这些类。更糟糕的是,如果您的脚本已经在运行,它可能已经包含这些类的实例,如果在类定义消失的情况下进行操作,这会使解释器崩溃。

于 2012-05-23T08:27:44.160 回答
-1

至于解决方法,如果您使用 PHP CLI 或其内置服务器 ( php -S),您始终可以指定-n/--no-php-ini来忽略您的php.ini,因此它将在运行时卸载所有扩展。对测试很有用。

于 2016-02-29T11:35:49.817 回答