Загрузка расширения PHP во время выполнения приводит к ошибке Uncaught: вызов неопределенной функции dl()

Я использую 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 Неустранимая ошибка: необработанная ошибка: вызов неопределенной функции dl() в D:\xampp\htdocs\php\1.php:7

Трассировка стека: #0 {main} добавлено в D:\xampp\htdocs\php\1.php в строке 7


person Sugumar Venkatesan    schedule 02.12.2017    source источник


Ответы (1)


Проблема в том, что функция dl() была удалена из большинства SAPI некоторое время назад, и вас просят использовать Директивы загрузки расширений вместо этого.

Текущая Документация по PHP предупреждает именно об этом.

<сильный>1. Документация и история

Внимание Эта функция была удалена из большинства SAPI в PHP 5.3.0 и была удалена из PHP-FPM в PHP 7.0.0.

Это полная история изменений:

  • 7.0.0 dl() отключен в PHP-FPM.
  • 5.3.9 dl() включен в PHP-FPM, хотя и не рекомендуется.
  • 5.3.0 dl() теперь отключен в некоторых SAPI из-за проблем со стабильностью. Единственными SAPI, поддерживающими dl(), являются CLI и Embed.

<сильный>2. Есть решение?

Реальный вопрос в том, действительно ли вам нужно решение? В конце концов, функции dl() устарели по какой-то причине.

Ваша система должна поддерживать вашу кодовую базу, а не ваша кодовая база, чтобы сделать систему совместимой.

Используйте функцию extension_loaded(), чтобы проверить, загружено ли расширение, и если оно не вызывает ошибку/исключение, вместо того, чтобы пытаться динамически загрузить его во время выполнения.

Вы можете безопасно загрузить все нужные расширения, используя системный php.ini файл директивы расширения.

person iivannov    schedule 02.12.2017