PHP 5.3+ enable_dl没有启用dl()?

jon*_*anm 7 php php-extension

我正在尝试在Ubuntu 11.10上将第三方PHP扩展(.so)安装到PHP 5.3.6-13中,并在Web环境中使用它.供应商的文档建议使用该dl()函数动态加载库.

当我尝试他们的示例代码时,我发现dl()它不可用(致命错误:调用未定义函数dl())因为dl()函数在PHP 5.3中已弃用.但有一个enable_dl在php.ini中配置规则,以及其他来源说,我应该能够使用DL()仅仅通过改变php.ini中的变量(enable_dl=On,safe_mode=Off,未上市disable_functions)和重启动Apache.当我尝试时,dl()仍未定义.

所以我深入研究PHP 5.3 SAPI更改说明并找到:

dl()函数现在默认禁用,现在只能在CLI,CGI和嵌入的SAPI下使用.

这是否意味着使用Web SAPI dl()不仅在PHP 5.3+中"默认禁用",而且实际上"即使修改PHP配置选项,无论我做什么都完全不可用"?这就是我的感觉,因为dl()无论我调整什么,我都无法上班.

澄清:我可以修改php.ini并直接加载扩展,所以这不是关于如何使扩展工作的问题,而是关于dl()PHP 5.3+中的函数及其状态的问题.如果它在任何情况下都不再可用,我希望能够告诉供应商,以便他们可以更新他们的文档.但如果它应该可用而且我只是遗漏了一些东西,我也想听听.

hak*_*kre 3

该函数已从 PHP 5.3 中的某些 SAPI 中删除。--dl()

因此,如果您将 ini 设置enable_dl设置为on,但它仍然不起作用,那么它在您使用的 SAPI 中被禁用。

如果您想知道哪些 SAPI 意味着什么,同一页面上的变更日志更详细:

唯一允许的 SAPIdl()是 CLI 和 Embed。

您没有使用这两个中的任何一个。相反,使用扩展加载指令就可以了。

  • 如果在 PHP 引擎级别禁用它,您会感觉完全不可用。事实上,该功能仍然在您的 php 二进制文件中,但实际上已禁用(在引擎级别),这并不意味着有一个 ini 设置可以重新启用它。所以这只是一个措辞问题,有时向每个人描述清楚技术情况并不容易,这就是我们问的原因;) (2认同)