こんにちは!今回は、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関数のメリット
- メモリ効率が良い
- 大きなファイルも扱いやすい
- シンプルで使いやすい
- 行単位の処理に最適
注意点
- ファイルを開いたら必ず閉じる
- 文字コードに注意する
- エラーハンドリングを適切に行う
実践的なサンプルコード
ログファイル解析の例
<?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行ずつ読み込むため、メモリ効率が良い
- 使い方がシンプル
- 大容量ファイルの処理に適している
- 行単位の処理に最適
適切なエラーハンドリングと文字コード処理を組み合わせることで、より堅牢なファイル処理が実現できます。
関連情報
- ファイル操作関数
- 文字コード処理
- エラーハンドリング
- ストリーム処理
ご質問やご意見がありましたら、コメント欄までお願いします!
 
  
  
  
  