Loading a PHP extension at runtime results in Uncaught Error: Call to undefined function dl()

Loading a PHP extension at runtime results in Uncaught Error: Call to undefined function dl()

我正在使用 PHP 7.1.11 我正在尝试这个功能 dl(),但它显示错误。

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

代码:

<?php
error_reporting(-1);
echo phpversion();
   
echo PHP_OS;
if(!extension_loaded('fileinfo')){
    dl('php_fileinfo.dll');
}
...

抛出错误:

7.1.11WINNT Fatal error: Uncaught Error: Call to undefined function dl() in D:\xampp\htdocs\php.php:7

Stack trace: #0 {main} thrown in D:\xampp\htdocs\php.php on line 7

问题是 dl() 功能已从大多数 SAPI 中删除,您被要求改用 Extension Loading Directives

当前的 PHP Documentation 就此发出警告。

1.文档和历史

Warning This function was removed from most SAPIs in PHP 5.3.0, and was removed from PHP-FPM in PHP 7.0.0.

这是完整的变更历史:

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

2。有解决办法吗?

真正的问题是您真的需要解决方案吗?毕竟 dl() 函数被弃用是有原因的。

It's up to your system to support your codebase and not your codebase to make the system compliant.

使用 extension_loaded() 函数检查扩展是否已加载,如果未加载则引发 error/exception 而不是尝试在运行时动态加载它。

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

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