2024 年日本 PHP 研討會

stream_wrapper_register

(PHP 4 >= 4.3.2, PHP 5, PHP 7, PHP 8)

stream_wrapper_register註冊一個以 PHP 類別實作的 URL 包裝器

說明

stream_wrapper_register(字串 $protocol, 字串 $class, 整數 $flags = 0): 布林

允許您實作自己的協定處理程式和資料流,以便與所有其他檔案系統函式(例如 fopen()fread() 等)一起使用。

參數

protocol

要註冊的包裝器名稱。有效的協定名稱只能包含字母數字、點 (.)、加號 (+) 或連字號 (-)。

class

實作 protocol 的類別名稱。

flags

如果 protocol 是 URL 協定,則應設定為 STREAM_IS_URL。預設值為 0,表示本地資料流。

返回值

成功時返回 true,失敗時返回 false

如果 protocol 已經有處理程式,stream_wrapper_register() 將返回 false

範例

範例 #1 如何註冊資料流包裝器

<?php
$existed
= in_array("var", stream_get_wrappers());
if (
$existed) {
stream_wrapper_unregister("var");
}
stream_wrapper_register("var", "VariableStream");
$myvar = "";

$fp = fopen("var://myvar", "r+");

fwrite($fp, "line1\n");
fwrite($fp, "line2\n");
fwrite($fp, "line3\n");

rewind($fp);
while (!
feof($fp)) {
echo
fgets($fp);
}
fclose($fp);
var_dump($myvar);

if (
$existed) {
stream_wrapper_restore("var");
}

?>

以上範例將輸出:

line1
line2
line3
string(18) "line1
line2
line3
"

另請參閱:

新增註釋

使用者貢獻的註釋 2 則註釋

cellog at php dot net
19 年前
如果您打算在 require_once 中使用您的包裝器,您需要定義 stream_stat()。如果您打算允許任何其他測試,例如 is_file()/is_dir(),您必須定義 url_stat()。

stream_stat() 必須定義檔案的大小,否則它將永遠不會被包含。url_stat() 必須定義模式,否則 is_file()/is_dir()/is_executable() 以及任何受 clearstatcache() 影響的函式將無法正常運作。

文件中沒有說明,但目錄的模式必須像 040777(八進位),檔案的模式必須像 0100666。如果您希望檔案可執行,請使用 7s 而不是 6s。最後 3 位數與您傳遞給 chmod 的內容完全相同。040000 定義目錄,0100000 定義檔案。將此添加到官方手冊中會很有幫助!
jhannus at php dot net
19 年前
值得注意的是,如果您的包裝器支援 `stream_flush()`,那麼當您使用 `fclose()` 關閉串流時,此函式會在關閉串流之前被呼叫。
To Top