介紹
在PHP中,"偽協議" 是一種特殊的協議,它並不涉及傳統的網路傳輸,而是用於訪問特定的PHP功能或資源。這些偽協議通常以 php://
開頭,並用於運算元據流、記憶體、程序的輸入輸出等。
常見的PHP偽協議
php://input: 只讀流,用於讀取原始的POST資料。可以多次讀取並返回相同的內容。
$data = file_get_contents('php://input');
php://output: 可寫流,用於向輸出緩衝區寫入資料。通常用於直接輸出內容到瀏覽器。
$output = fopen('php://output', 'w');
fwrite($output, "Hello World");
fclose($output);
php://memory: 使用記憶體作為臨時檔案進行讀寫操作的流。在記憶體中儲存資料,關閉流後資料將丟失。
php://temp: 類似於php://memory,但超過一定大小(預設2MB)後,資料將自動儲存到磁碟的臨時檔案中。
$stream = fopen('php://memory', 'w+');
fwrite($stream, 'Some data');
rewind($stream); // 使檔案位置指標重新定位到檔案的開始位置
echo stream_get_contents($stream);
fclose($stream);
php://stdin: 只讀流,允許訪問PHP程序的標準輸入。適用於從命令列或其他輸入源讀取資料。
$input = fgets(fopen('php://stdin', 'r')); // 讀取一行
$input = file_get_contents('php://stdin'); // 讀取整個輸入
// 命令列互動獲取姓名
echo "Please enter your name: ";
$name = trim(fgets(fopen('php://stdin', 'r')));
echo "Hello, $name!\n";
php://stdout: 可寫流,允許訪問PHP程序的標準輸出。適用於命令列或其他輸出目標寫入資料。 輸出資料到命令列或者將輸出資料重定向到檔案或其他程序。
fwrite(fopen('php://stdout', 'w'), "This message is displayed in the terminal.\n");
php://stderr: 可寫流,允許訪問PHP程序的標準錯誤輸出。適用於向命令列或其他錯誤流目標寫入錯誤訊息。輸出錯誤或警告資訊,以便與標準輸出區分開來。
fwrite(fopen('php://stderr', 'w'), "This is an error message.\n");
其他常見的PHP封裝協議
file:// — 訪問本地檔案系統
允許讀取和寫入本地檔案系統的檔案。使用file://可以開啟和操作檔案,就像在檔案路徑前面加上file://一樣。
fopen('file:///path/to/file.txt', 'r');
http:// 和 https:// — 訪問HTTP(S) URLs
用於透過HTTP或HTTPS協議從遠端伺服器讀取資料,類似於瀏覽器訪問網頁的方式。可以使用它來執行GET、POST請求等。
fopen('http://example.com', 'r');
ftp:// 和 ftps:// — 訪問FTP(S) URLs
用於透過FTP協議從遠端伺服器上傳或下載檔案。支援匿名訪問和帶有使用者名稱密碼的認證。
fopen('ftp://user:password@ftp.example.com/file.txt', 'r');
zlib:// — 壓縮流
提供對gzip壓縮檔案的讀寫操作。常用於處理壓縮資料。
fopen('compress.zlib://example.gz', 'r');
data:// — 資料(基於RFC 2397)
允許內聯資料作為檔案資源來使用。data://協議通常用於處理base64編碼的資料。
fopen('data://text/plain;base64,SGVsbG8gd29ybGQ=', 'r');
glob:// — 查詢匹配的檔案路徑模式
用於根據指定的檔案模式查詢匹配的檔案路徑。類似於Linux的glob命令。
foreach (glob('glob://*.txt') as $filename) { echo $filename; }
phar:// — PHP歸檔
用於訪問PHP歸檔檔案(PHAR檔案)中的內容。支援類似於ZIP的壓縮檔案結構。有些SDK使用該協議來打包和分發程式碼。
fopen('phar://archive.phar/file.txt', 'r');
ssh2:// — Secure Shell 2
提供透過SSH協議訪問遠端伺服器的能力。適用於透過SSH傳輸檔案或執行命令。
fopen('ssh2://username@hostname/path/to/file.txt', 'r');
rar:// — RAR
用於訪問RAR壓縮檔案中的內容。適合處理RAR壓縮包的檔案提取。
fopen('rar://archive.rar/file.txt', 'r');
ogg:// — 音訊流
用於讀取Ogg格式的音訊流。通常在音訊處理應用中使用。
fopen('ogg://stream.ogg', 'r');
expect:// — 處理互動式的流
用於處理互動式命令列操作。可以在PHP指令碼中控制和操作互動式命令。
fopen('expect://command', 'r');