assert
extension_loaded
PHP オプション/情報 関数
PHP Manual

# dl

(PHP 4, PHP 5)

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

### 説明

int dl ( string `$library` )

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

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

### パラメータ

`library`

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

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

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

  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_OS, 0, 3)) === 'WIN') {
dl('php_sqlite.dll');
} else {
dl('sqlite.so');
}
}
// PHP 4.3.0 では PHP_SHLIB_SUFFIX 定数を利用することも可能
if (!extension_loaded('sqlite')) {
$prefix = (PHP_SHLIB_SUFFIX === 'dll') ? 'php_' : '';
dl($prefix . 'sqlite.' . PHP_SHLIB_SUFFIX);
}
?>`

### 注意

> 注意: dl() はマルチスレッド Web サーバ上では サポートされません。 そのような環境の場合には php.ini 上で extensions 命令を使用するようにしてください。しかし、CGI や CLI には 影響しません!

> 注意: PHP 5 では、CLI 以外の あらゆる SAPI において dl() 関数が非推奨となっています。 代わりに、拡張モジュール 読み込み用のディレクティブを利用してください。

> 注意: PHP 6 以降では、CLI, CGI および組み込み版 (embed) を除くすべての SAPI でこの関数は無効となっています。

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

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

### 参考

- 拡張モジュール読み込み用のディレクティブ
- extension_loaded()

assert
extension_loaded
PHP オプション/情報 関数
PHP Manual