卸载 PHP 扩展:反向 DL()


unloading php extensions : reverse dl()

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

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

[2011-02-08 11:34 UTC] rasmus@php.net
基于每个请求的扩展卸载根本不可行 性能观点。 而且您显然无法卸载并使其卸载 对于下一个请求,因为下一个请求可能针对需要 扩展要在那里。

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

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

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