PHP Content-Range是一種HTTP標頭,用于指示僅請求文檔的一部分。 它與Range標頭一起使用,使客戶端能夠僅請求需要的部分文檔,而不是一次請求整個文件。 Content-Range標頭格式如下所示:
Content-Range: bytes start-end/total-size
其中:
bytes
表示我們要讀取的部分是字節范圍start-end/total-size
表示讀取的范圍以及整個返回內容的大小
舉例來說,如果我們要在數字1和數字100之間獲取一組數字,并且我們的數字存儲在名為numbers.php的PHP文件中,則可以使用以下代碼:
curl --header "Range: bytes=0-100" http://localhost/numbers.php
此命令將讀取頁面上的前100個字節,將其視為文本并輸出。如果需要的話,我們可以使用更高的數字來獲取更多的數字。
現在,讓我們看看如何在PHP代碼中使用Content-Range。如果我們有一個名為numbers.csv的文件,其中包含一列數字,請使用以下代碼為HTTP請求設置正確的Content-Range-頭:
$range = $_SERVER['HTTP_RANGE'] ?? '';
$bits = explode('-', $range);
$start = $bits[0];
$end = $bits[1];
if(strlen($range) >0) {
header('Content-Range: bytes ' . $start . '-' . $end . '/' . filesize('numbers.csv'));
}
header('Content-Type: text/plain');
readfile('numbers.csv');
上面的代碼塊檢查HTTP請求是否包括Range標頭; 如果我們要一次獲取整個文件,則不需要Content-Range標頭。如果請求中包含內容,代碼塊會解析請求以檢索所需的區域,然后發送Content-Range標頭,以通知客戶端使用的字節范圍。
總體來說,使用Content-Range可以提高應用程序的性能,因為客戶端可以僅獲取他們需要的文件部分,而不必等待整個文件下載完成。同時,不必下載整個文件還可以減少網絡帶寬的使用。