[PHP]fgets関数でファイルを1行ずつ読み込む方法を解説!使い方とサンプルコード付き

PHP

こんにちは!今回は、PHPでテキストファイルを読み込む際によく使用される「fgets関数」について、初心者にもわかりやすく解説していきます。

fgets関数とは?

fgets関数は、ファイルから1行ずつテキストを読み込むPHPの組み込み関数です。主にテキストファイルやログファイルの読み込みに使用され、メモリ効率の良い処理が可能です。

基本的な構文

string fgets ( resource $handle [, int $length ] )

パラメータ解説

  • $handle: ファイルポインタ(必須)
  • $length: 読み込む最大バイト数(省略可能)

基本的な使い方

シンプルな例

<?php
// ファイルを開く
$file = fopen("sample.txt", "r");

// 1行ずつ読み込む
while (($line = fgets($file)) !== false) {
    echo $line;
}

// ファイルを閉じる
fclose($file);
?>

文字コード対応版

<?php
$file = fopen("sample.txt", "r");

while (($line = fgets($file)) !== false) {
    // SJIS → UTF-8に変換
    $line = mb_convert_encoding($line, 'UTF-8', 'SJIS');
    echo $line;
}

fclose($file);
?>

実践的な使い方

ファイル存在チェック付きの例

<?php
$filename = "sample.txt";

if (file_exists($filename)) {
    $file = fopen($filename, "r");

    while (($line = fgets($file)) !== false) {
        // 改行コードを削除して出力
        echo trim($line) . "<br>";
    }

    fclose($file);
} else {
    echo "ファイルが存在しません。";
}
?>

行番号付きで読み込む例

<?php
$file = fopen("sample.txt", "r");
$line_number = 1;

while (($line = fgets($file)) !== false) {
    echo "行{$line_number}: " . htmlspecialchars($line) . "<br>";
    $line_number++;
}

fclose($file);
?>

よくあるつまずきポイントと解決方法

1. 文字化けの対応

// mb_convert_encodingを使用
$line = mb_convert_encoding($line, 'UTF-8', 'AUTO');

2. 改行コードの処理

// trim()で改行を削除
$line = trim($line);

3. セキュリティ対策

// HTMLエスケープ処理
$line = htmlspecialchars($line, ENT_QUOTES, 'UTF-8');

fgets関数のメリット

  1. メモリ効率が良い
  2. 大きなファイルも扱いやすい
  3. シンプルで使いやすい
  4. 行単位の処理に最適

注意点

  • ファイルを開いたら必ず閉じる
  • 文字コードに注意する
  • エラーハンドリングを適切に行う

実践的なサンプルコード

ログファイル解析の例

<?php
function analyzeLog($filename) {
    $errors = [];
    $file = fopen($filename, "r");

    while (($line = fgets($file)) !== false) {
        if (strpos($line, 'ERROR') !== false) {
            $errors[] = trim($line);
        }
    }

    fclose($file);
    return $errors;
}

// 使用例
$errorLogs = analyzeLog('error.log');
foreach ($errorLogs as $error) {
    echo $error . "<br>";
}
?>

まとめ

fgets関数は、以下のような特徴を持つ非常に便利な関数です:

  • 1行ずつ読み込むため、メモリ効率が良い
  • 使い方がシンプル
  • 大容量ファイルの処理に適している
  • 行単位の処理に最適

適切なエラーハンドリングと文字コード処理を組み合わせることで、より堅牢なファイル処理が実現できます。

関連情報

  • ファイル操作関数
  • 文字コード処理
  • エラーハンドリング
  • ストリーム処理

ご質問やご意見がありましたら、コメント欄までお願いします!

タイトルとURLをコピーしました