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 に明記されていない場合、デフォルトでは 以下に依存します。

上記を考慮して、ディレクトリのデフォルトは <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() も参照してください。