PHP マニュアル
前のページ |  | 次のページ

# dl

(PHP 3, PHP 4, PHP 5)

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

## 説明

int dl ( string library )

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

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

extension_loaded() で、指定された拡張モジュールが 既に有効かどうか調べることができます。ビルトインの拡張モジュールと 動的なものと両方を調べることができます(`php.ini` で指定されたものも dl() でロードされたものも)。

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

例 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); } ?>`

拡張モジュールがロードされるディレクトリはプラットフォームによって 違います:

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`.

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

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

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

> 注意: この関数は、safe-mode では無効となります。

Extension Loading Directives extension_loaded() も参照してください。

前のページ | ホーム | 次のページ
assert | 上に戻る | extension_loaded