在运行时加载PHP扩展会导致未捕获错误:调用未定义的函数dl()

时间:2017-12-02 12:01:54

标签: php apache php-extension

我正在使用 PHP 7.1.11 我只是尝试使用此函数dl(),但它显示错误。

我在php_fileinfo.dll中评论了php.ini并重新启动了Apache。 我认为问题不在于.dll,因此,问题在于dl()函数。

代码:

<?php
error_reporting(-1);
echo phpversion();

echo PHP_OS;
if(!extension_loaded('fileinfo')){
    dl('php_fileinfo.dll');
}
...

抛出错误:

  

7.1.11WINNT致命错误:未捕获错误:在D:\ xampp \ htdocs \ php \ 1.php中调用未定义的函数dl():7

     

堆栈跟踪:#7 {main}在第7行的D:\ xampp \ htdocs \ php \ 1.php中抛出

1 个答案:

答案 0 :(得分:2)

问题是前一段时间大多数SAPI都删除了dl()功能,而是要求您使用Extension Loading Directives

目前PHP Documentation对此发出警告。

<强> 1。文件和历史

  

警告   此功能已从PHP 5.3.0中的大多数SAPI中删除,并已从PHP 7.0.0中的PHP-FPM中删除。

这是完整的更改历史记录:

    在PHP-FPM中禁用了
  • 7.0.0 dl()
  • 5.3.9 dl()在PHP-FPM中启用,尽管不鼓励。
  • 由于稳定性问题,
  • 5.3.0 dl()现已在某些SAPI中停用。允许dl()的唯一SAPI是 CLI 嵌入

<强> 2。有解决方案吗?

真正的问题是你真的需要一个解决方案吗?毕竟,dl()函数已被弃用。

  

由您的系统来支持您的代码库,而不是您的代码库以使系统兼容。

使用extension_loaded()函数检查扩展是否已加载,如果没有引发错误/异常,而不是尝试在运行时动态加载它。

您可以使用系统的php.ini文件扩展指令

来安全地加载您想要的所有扩展程序