• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • gzseek()

    (PHP 4, PHP 5, PHP 7)

    Seek on a gz-file pointer

    说明

    gzseek(resource $zp,int $offset[,int $whence= SEEK_SET]): int

    Sets the file position indicator for the given file pointer to the given offset byte into the file stream. Equivalent to calling(in C)gzseek(zp, offset, SEEK_SET).

    If the file is opened for reading, this function is emulated but can be extremely slow. If the file is opened for writing, only forward seeks are supported;gzseek() then compresses a sequence of zeroes up to the new starting position.

    参数

    $zp

    The gz-file pointer. It must be valid, and must point to a file successfully opened by gzopen().

    $offset

    The seeked offset.

    $whence

    $whencevalues are:

    • SEEK_SET- Set position equal to$offsetbytes.
    • SEEK_CUR- Set position to current location plus$offset.

    If$whenceis not specified, it is assumed to be SEEK_SET.

    返回值

    Upon success, returns 0; otherwise, returns -1. Note that seeking past EOF is not considered an error.

    范例

    gzseek() example

    <?php
    $gz = gzopen('somefile.gz', 'r');
    gzseek($gz,2);
    echo gzgetc($gz);
    gzclose($gz);
    ?>
    

    参见

    • gztell()Tell gz-file pointer read/write position
    • gzrewind()Rewind the position of a gz-file pointer
    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.
    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;
    }

    上篇:gzrewind()

    下篇:gztell()