Since seek after the end is not considered an error, I doubt that "while (gzseek ($fh, $eof) == 0) $eof += $d;" will get into infinite loop.gzseek
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
gzseek
Референца за `function.gzseek.php` со подобрена типографија и навигација.
gzseek
(PHP 4, PHP 5, PHP 7, PHP 8)
gzseek — Побарај на gz-датотека покажувач
= NULL
Го поставува покажувачот на позицијата на датотеката за дадениот покажувач на датотека на дадениот офсет бајт во протокот на датотеката. Еквивалентно на повикување (во C)
gzseek(zp, offset, SEEK_SET).
Ако датотеката е отворена за читање, оваа функција се емулира, но може да биде исклучително бавна. Ако датотеката е отворена за пишување, поддржани се само барања напред; gzseek() потоа компресира низа од нули до новата почетна позиција.
Параметри
Вратени вредности
При успех, враќа 0; инаку, враќа -1. Имајте предвид дека барањето по EOF не се смета за грешка.
Примери
Пример #1 gzseek() example
<?php
$gz = gzopen('somefile.gz', 'r');
gzseek($gz,2);
echo gzgetc($gz);
gzclose($gz);
?>Види Исто така
- gztell() - Кажи ја позицијата за читање/запишување на gz-покажувачот на датотека
- gzrewind() - Помести на почеток на позицијата на gz-покажувач на датотека
Белешки од корисници 2 забелешки
PHP/4.3.9
contrary to the notes, gzseek() returns -1 if I try to seek past the end of the file. here is a function that will return the last seekable position, and put the file pointer there.
/** sets the file pointer at the end of the file
* and returns the number of bytes in the file.
*/
function gzend($fh)
{
$d = 1<<14;
$eof = $d;
while ( gzseek($fh, $eof) == 0 ) $eof += $d;
while ( $d > 1 )
{
$d >>= 1;
$eof += $d * (gzseek($fh, $eof)? -1 : 1);
}
return $eof;
}