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

人盡茶涼 提交于 2021-01-28 02:50:54

问题


I am using PHP 7.1.11 I am just trying this function dl(), but it shows an error.

I commented php_fileinfo.dll in php.ini and restarted the Apache. I think the problem is not with .dll and so, the problem is with the dl() function.

Code:

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

Error thrown:

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

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


回答1:


The problem is that dl() function was removed from most SAPIs some time ago and you are asked to use the Extension Loading Directives instead.

The current PHP Documentation warns exactly about this.

1. Documentation and history

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

This is the full change history:

  • 7.0.0 dl() is disabled in PHP-FPM.
  • 5.3.9 dl() is enabled in PHP-FPM, albeit discouraged.
  • 5.3.0 dl() is now disabled in some SAPIs due to stability issues. The only SAPIs that allow dl() are CLI and Embed.

2. Is there a solution?

The real question is do you really need a solution? The dl() functions was deprecated for a reason after all.

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

Use the extension_loaded() function to check if the extension is loaded and if not raise a error/exception instead of trying to dynamically load it in runtime.

You can load all the extensions you want securely by using the system's php.ini file extension directives



来源:https://stackoverflow.com/questions/47607686/loading-a-php-extension-at-runtime-results-in-uncaught-error-call-to-undefined

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!