Статьи

Как работать с незагруженными расширениями PHP во время выполнения

настроить PHP Если вы не создаете очень простые приложения, вам скоро потребуется одно или несколько расширений PHP. Расширения — это библиотеки кода, которые расширяют основные функциональные возможности языка.

Загрузка расширения

Для целей этой статьи мы будем предполагать, что вам нужно создавать или манипулировать изображениями и требовать PHP-библиотеку GD. Чтобы загрузить библиотеку GD в вашей системе:

  • Для Windows вам нужно включить / раскомментировать строку extension = php_gd2.dll в файле конфигурации php.ini.
  • Для Linux / Unix вы должны использовать параметр конфигурации PHP --with-gd
  • Для Mac OS X … э-э, лучше всего Google. Извиняюсь за то, что не предоставил конкретные детали, но, похоже, существует несколько способов настройки поддержки GD. Это зависит от вашей версии OS X и от того, используете ли вы встроенный веб-сервер или пользовательскую установку Apache.

Но что происходит, когда вы хотите переместить ваше веб-приложение на другой хост или платформу, где настроен другой набор расширений?

Проверка расширения загружено

PHP предоставляет функцию extension_loaded ( name ), которая возвращает true, когда именованная библиотека доступна, например

 
<?php
if (extension_loaded('gd')) {
	echo 'GD extension is loaded and everything is fine!';
}
else {
	echo 'Where is the GD library?';
	exit();
}
?>

Кроме того, вы можете проверить существование определенной библиотечной функции с помощью функции function_exists () , например:

 
<?php
if (function_exists('gd_info')) {
	echo 'gd_info() is available so the GD library is probably available.';
}
else {
	echo 'gd_info() cannot be found?';
	exit();
}
?>

Однако функция function_exists () более опасна — другой разработчик может написать свою собственную функцию с именем ‘gd_info’.

Я бы рекомендовал использовать function_exists () в ситуациях, когда функция была представлена ​​в более поздней версии PHP. Например, если ваше приложение работает как на PHP4, так и на PHP5, вы можете проверить наличие функции imagefilter () (функция GD только для PHP5), прежде чем пытаться изменить изображение.

Обработка выгруженных расширений

PHP предоставляет функцию dl () для динамической загрузки расширений во время выполнения. К сожалению:

  • он может быть отключен в вашей системе
  • расширения должны быть загружены путем ссылки на имя файла; это разные на разных платформах
  • это немного облуплено …
  • так что это устарело в PHP 5.3
  • и будет удален из PHP6.

Я бы рекомендовал избегать использования dl (). Это оставляет нам три варианта:

  1. Перед началом кодирования убедитесь, что расширение включено на всех ваших целевых платформах!
  2. Оповещение администратора, если существенное расширение недоступно во время установки. Например, ваше приложение должно корректно остановиться и предоставить дополнительные инструкции, если оно не будет работать без интерфейса базы данных PDO.
  3. Предоставить пониженный опыт. Например, ваше приложение может отключить обработку изображений, если библиотека GD недоступна. Вы можете предупредить администратора во время установки, но все же разрешите запуск приложения.

У вас есть другие советы по работе с отсутствующими расширениями PHP?