dl

(PHP 4, PHP 5, PHP 7)

dl実行時に PHP 拡張モジュールをロードする

説明

dl ( string $library ) : bool

library で指定された PHP 拡張モジュールを読み込みます。

その拡張モジュールが既に使用可能かどうかを調べるには、 extension_loaded() を使用します。 これは、組み込みのモジュールと (php.ini か、あるいは dl() を使用して) 動的に読み込むモジュールの両方に対応しています。

警告

この関数は、PHP 5.3 以降で大半の SAPI からは削除されました。 また、PHP 7.0.0 では PHP-FPM からも削除されました。

パラメータ

library

このパラメータに指定できるのは拡張モジュールの ファイル名だけであり、それはプラットフォームに依存します。 例えば、Unix プラットフォームでは sockets 拡張モジュール (共有モジュールとしてコンパイルされていれば。デフォルトでは有りません!) は sockets.so と呼ばれていますし、一方 Windows プラットフォームでは php_sockets.dll と呼ばれます。

拡張モジュールを読み込むディレクトリは、プラットフォームによって異なります。

Windows - php.ini に明記されていない場合、デフォルトでは 拡張モジュールは、C:\php5\ からロードされます。

Unix - php.ini に明記されていない場合、デフォルトでは 以下に依存します。

  • PHP をビルドする際に --enable-debug を指定しているか否か
  • PHP をビルドする際に (実験段階の) ZTS (Zend Thread Safety) サポートを有効にしているか否か
  • 現在の ZEND_MODULE_API_NO(Zend 内部モジュール API 番号。基本的にはメジャーモジュール API の変更が発生した日時。 例:20010901)
上記を考慮して、ディレクトリのデフォルトは <install-dir>/lib/php/extensions/ <debug-or-not>-<zts-or-not>-ZEND_MODULE_API_NO となる。 例: /usr/local/php/lib/php/extensions/debug-non-zts-20010901 または /usr/local/php/lib/php/extensions/no-debug-zts-20010901.

返り値

成功した場合に TRUE を、失敗した場合に FALSE を返します。 拡張モジュールのロード機能が無効だったり、あるいは 無効化されている(enable_dl でオフにされているか または php.iniセーフモード が有効になっている)場合は、 E_ERROR を発行して実行は停止されます。 指定されたライブラリをロードできず dl() が 失敗した場合、FALSE に加えて E_WARNING メッセージが 発行されます。

例1 dl() の例

<?php
// OS によってロードするファイルを切り替える
if (!extension_loaded('sqlite')) {
    if (
strtoupper(substr(PHP_OS03)) === 'WIN') {
        
dl('php_sqlite.dll');
    } else {
        
dl('sqlite.so');
    }
}

// または PHP_SHLIB_SUFFIX 定数を使用
if (!extension_loaded('sqlite')) {
    
$prefix = (PHP_SHLIB_SUFFIX === 'dll') ? 'php_' '';
    
dl($prefix 'sqlite.' PHP_SHLIB_SUFFIX);
}
?>

変更履歴

バージョン 説明
7.0.0 dl() が PHP-FPM で無効になりました。
5.3.0 dl() がいくつかの SAPI で無効になりました。 安定性に問題があったためです。 現在 dl() が使える SAPI は CLI と Embed(組み込み) だけです。 かわりに 拡張モジュール読み込みディレクティブ を使ってください。

注意

注意:

dl() は、ZTS サポートつきでビルドされた PHP ではサポートされていません。かわりに 拡張モジュール読み込みディレクティブ を使ってください。

注意:

dl() は Unix プラットフォーム上では 大文字小文字を区別します。

注意: この関数は、PHP が safe-mode で動作している場合は無効となります。

参考