Forum und email

dl

(PHP 4, PHP 5)

dl — egy PHP kiterjesztés betöltése futásidőben

Leírás

int dl ( string $library )

Betölti azt a PHP kiterjesztést, amit a library paraméterben adtál meg. A library paraméter a betöltendő kiterjesztésnek csak a fájlneve, ami függ a platformtól is. Például a sockets kiterjesztés (ha megosztott modulként volt fordítva, ami nem alapértelmezett) Unix platformokon sockets.so, míg Windows-on php_sockets.dll.

Siker esetén TRUE értékkel tér vissza, ellenkező esetben FALSE értéket ad. Ha a modulbetöltés nem lehetséges (lásd a megjegyzést) vagy nem engedélyezett (a enable_dl ki van kapcsolva vagy a safe mode be van kapcsolva a php.ini-ben), akkor egy E_ERROR szintű hiba keletkezik és a szkript futása megszakad. Ha a dl() függvény végrehajtása sikertelen mert a megadott könyvtárat nem lehet betölteni, a függvény FALSE-ot ad vissza és dob egy E_WARNING szintű hibát.

Hogy egy kiterjesztésről megtudd, hogy be van-e töltve vagy sem, használd az extension_loaded() függvényt. Ez működik a beépített és a dinamikusan betöltött kiterjesztésekre is (mind a php.ini-vel mind a dl() függvénnyel betöltöttekre igaz).

A dl() függvény használata a PHP 5-től kezdve ellenjavallt. Helyette használd a kiterjesztés betöltő direktívák módszerét.

Example#1 dl() példák

<?php
// Kiterjesztés betöltése oprendszertől függően
if (!extension_loaded('sqlite')) {
    if (
strtoupper(substr(PHP_OS03) == 'WIN')) {
        
dl('php_sqlite.dll');
    } else {
        
dl('sqlite.so');
    }
}

// A PHP 4.3.0 a PHP_SHLIB_SUFFIX konstans is rendelkezésre áll
if (!extension_loaded('sqlite')) {
    
$prefix = (PHP_SHLIB_SUFFIX == 'dll') ? 'php_' '';
    
dl($prefix 'sqlite.' PHP_SHLIB_SUFFIX);
}
?>

A könyvtár ahonnan a kiterjesztést be lehet tölteni, platformtól függő:

Windows - Ha nincs explicite megadva a php.ini-ben, akkor a kiterjesztés a c:\php4\extensions\ könyvtárból töltödik be.

Unix - Ha nincs explicite megadva a php.ini-ben, az alapértelmezett kiterjesztés könyvtár függ a következőktől:

  • a PHP --enable-debug-gal lett-e fordítva vagy sem
  • a PHP (a kisérleti jellegű) ZTS (Zend Thread Safety) támogatással lett-e fordítva vagy sem
  • az aktuális belső ZEND_MODULE_API_NO (Zend belső API modul szám, ami alapjában az a dátum, amikor az API modulban nagyobb változtatás történt, pl. 20010901)
A fenti figyelembevételével, a könyvtár alapértelmezett értéke: <install-dir>/lib/php/extensions/ <debug-or-not>-<zts-or-not>-ZEND_MODULE_API_NO, pl. /usr/local/php/lib/php/extensions/debug-non-zts-20010901 vagy /usr/local/php/lib/php/extensions/no-debug-zts-20010901.

Note: A dl() nem támogatott a többszálas webszervereken. Használd az extensions utasítást a php.ini-ben, amikor ilyen környezetben dolgozol. A CGI és a CLI verziók nem érintettek!

Note: A dl() Unix platformokon különbséget tesz kis- és nagybetűk között.

Note: Ez a függvény nem használható, ha a safe mode be van kapcsolva.

Lásd még a kiterjesztés betöltő direktívákat és az extension_loaded() függvényt.