我正在浏览php.ini,我找到了以下参数enable_dl并附有一个奇怪的描述:
该指令实际上仅在Apache模块版本中有用 PHP。您可以使用dl()打开动态加载PHP扩展 关闭每个虚拟服务器或每个目录。
关闭动态加载的主要原因是安全性。同 动态加载,可以忽略所有open_basedir 限制。默认设置是允许动态加载,除非 使用安全模式。在安全模式下,始终无法使用dl()。
我在apache上运行php,我很好奇这个参数究竟对我有用。上面提到的描述对我来说并不是很清楚,所以如果有人可以详细说明,我会感激不尽。
答案 0 :(得分:5)
PHP模块(扩展)只能在PHP的启动阶段加载。例如,无法使用.user.ini
files加载它们。例如extension
directive只是 php.ini 。
这是一个提示 - 历史上.user.ini
文件不是核心,而是SAPI for Apache mod_php的每个目录.htaccess设置。
为避免此限制,我们引入了dl()
函数以在运行时动态加载扩展。但是只有在启用时才会使用enable_dl
指令。
但是,当前的PHP SAPI在很大程度上禁用了对dl
的支持,只在CLI和Embed中提供了 。
你还没有说过为什么你对dl()
我能给出的最佳答案感到好奇,是因为它仅仅是出于神秘的原因而有用。很可能它甚至对你想要使用它的SAPI没用(你没有共享SAPI名称,但我想它不是CLI也不是Embed)。
答案 1 :(得分:0)
这是旧的,但我会回答这个。 https://www.php.net/manual/en/function.dl.php 告诉你所有你需要知道的。基本上,当您在下面的 php ini 文件中定义要加载的扩展时,这允许相同的事情,但在代码级别。然而,预加载比使用它更快,因此除非您专门在代码中加载扩展,否则最好禁用此功能。