PHP | fgets 函數

怎樣按行讀取文件

最近更新時間 2021-01-01 12:29:46

fgets 函數從文件指針中讀取一行。

fgets() 函數接收兩個參數,其中文件指針為必填項。函數返回讀取的字符串,如果遇到錯誤或者沒有更多數據返回 false。

函數定義

fgets ( resource $handle [, int $length ] ) : string
// 源文件位於:ext/standard/file.c
# 函數定義

PHPAPI PHP_FUNCTION(fgets)
{
  ...
  if (len_is_null) {
    /* ask streams to give us a buffer of an appropriate size */
    buf = php_stream_get_line(stream, NULL, 0, &line_len);
    if (buf == NULL) {
      RETURN_FALSE;
    }
    // TODO: avoid reallocation ???
    RETVAL_STRINGL(buf, line_len);
    efree(buf);
  } else {
    if (len <= 0) {
      zend_argument_value_error(2, "must be greater than 0");
      RETURN_THROWS();
    }

    str = zend_string_alloc(len, 0);
    if (php_stream_get_line(stream, ZSTR_VAL(str), len, &line_len) == NULL) {
      zend_string_efree(str);
      RETURN_FALSE;
    }
    /* resize buffer if it's much larger than the result.
     * Only needed if the user requested a buffer size. */
    if (line_len < (size_t)len / 2) {
      str = zend_string_truncate(str, line_len, 0);
    } else {
      ZSTR_LEN(str) = line_len;
    }
    RETURN_NEW_STR(str);
  }
}

參數

  • checkhandle - 文件指針。文件指針必須有效,並且是通過 fopen() 或 fsockopen() 函數成功打開的文件(並還未由 fclose() 關閉)。
  • checklength - 取回該長度的數據。可選參數。

返回值

  • checkstring - 從指針 handle 指向的文件中讀取 length - 1 字節後返回字符串。錯誤或者文件結尾返回 false。

示例1: - 使用 fgets() 函數從文件指針中讀取一行。

<?php
/**
 * PHP 使用 fgets() 函數從文件指針中讀取一行。
 *
 * @since Version 1.0.0
 * @filesource
 */

// 打開文件
$handle = fopen('foo.txt', 'r');

// 按行讀取文件
if ($handle) {
  while (($line = fgets($handle)) !== false) {
    
  }

  // 檢測文件是否到結尾,防止異常終止
  if (!feof($handle)) {
    echo "Error: unexpected fgets() fail\n";
  }

  // 關閉文件
  fclose($handle);
}
rss_feed