(PHP 4, PHP 5)
dl — 運行時載入一個 PHP 擴展
說明
bool dl ( string$library
)
載入指定參數 library
的 PHP 擴展。
使用 extension_loaded() 來測試指定的擴展是否已經激活。 這既能用于內建的擴展也可以用于動態加載的擴展(既可以通過 php.ini 也可以通過 dl())。
Warning在 PHP 5.3 里,此函數被某些 SAPI 移除了。
參數
library
此參數僅僅是要加載的擴展的文件名,依賴于你的平臺。 比如,sockets(作為共享模塊編譯,而不是默認的!)在 Unix 平臺上稱為 sockets.so 而 在 Windows 平臺上是 php_sockets.dll。
擴展加載的目錄依賴于你的平臺:
Windows - 如果沒有在 php.ini 里明確設置,擴展默認會從 C:php4extensions (PHP 4) 或 C:php5 (PHP 5)加載。
Unix - 如果沒有在 php.ini 里明確設置,默認的擴展目錄依賴于 PHP 是否通過 --enable-debug 選項構建 PHP 是否以(實驗性質的)ZTS (Zned 線程安全)支持構建 當前的內部 ZEND_MODULE_API_NO(Zend 內部模塊 API 數字,基本上是主要模塊修改時的日期) 考慮到上述,目錄默認為 <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
的消息。
范例
Example #1 dl() 例子
<?php
// 加載一個擴展的例子,基于操作系統
if (!extension_loaded('sqlite')) {
if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
dl('php_sqlite.dll');
} else {
dl('sqlite.so');
}
}
// 或者,PHP_SHLIB_SUFFIX 常量在 PHP 4.3.0 后有效
if (!extension_loaded('sqlite')) {
$prefix = (PHP_SHLIB_SUFFIX === 'dll') ? 'php_' : '';
dl($prefix . 'sqlite.' . PHP_SHLIB_SUFFIX);
}
?>
更新日志
版本 說明 5.3.0 由于穩定性,dl() 在某些 SAPI 中被禁用。僅僅允許 dl() 的 SAPI 為 CLI 和 Embed。 使用 擴展加載指令 作為替代。
注釋
Note:
當 PHP 以支持 ZTS 構建時,不支持 dl()。 使用 擴展加載指令 作為替代。
Note:
在某些 Unix 平臺上,dl() 是大小寫敏感的。
Note: 當 PHP 運行在 安全模式 時,不能使用此函數。
參見
擴展加載指令 extension_loaded() - 檢查一個擴展是否已經加載