【PHP8.x】fgets関数の使い方

fgets関数の使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

fgets関数は、指定されたファイルポインタから1行分のデータを読み込む処理を実行する関数です。この関数は、主にテキストファイルの内容を1行ずつ処理する際に利用されます。ファイルポインタとは、fopen()関数などで開かれたファイルへの接続を示すものであり、fgets()関数はこのポインタを通じてデータを読み込みます。

具体的には、fgets()関数は、ファイルポインタから改行コード(\n)に到達するまで、あるいは指定された最大バイト数に達するまで文字を読み込みます。読み込みが成功すると、改行コードを含んだ文字列を返します。例えば、ログファイルや設定ファイルなど、行単位で情報を区切っているテキストファイルの内容をPHPプログラムで解析する際に非常に役立ちます。

引数としては、読み込み対象となるファイルポインタを最初に指定します。オプションで第二引数に読み込む最大バイト数を指定できます。このバイト数を指定することで、意図しない大きなデータブロックの読み込みを防ぎ、メモリ使用量を制御することが可能です。この最大バイト数が指定された場合、実際には指定値から1を引いたバイト数までが読み込まれ、残りの1バイトは文字列の終端を示すnull文字のために予約されます。

戻り値は、読み込みが成功した場合は文字列として返されますが、ファイルの終端(EOF)に達した場合や、何らかのエラーが発生した場合はfalseを返します。そのため、通常は戻り値がfalseでないことを確認しながら、whileループなどを用いてファイル全体を読み進めるように使用されます。fgets()関数は、ファイルからの行単位のデータ取得を安全かつ効率的に行うための、PHPにおける基本的なファイル操作関数の一つです。

構文(syntax)

1<?php
2$fileHandle = fopen('php://stdin', 'r');
3$line = fgets($fileHandle);
4fclose($fileHandle);
5?>

引数(parameters)

resource $stream, ?int $length = null

  • resource $stream: 読み込む対象となるファイルポインタやソケットなどのリソースを指定します
  • ?int $length = null: 読み込む最大バイト数を指定します。省略した場合、1行全体を読み込みます

戻り値(return)

string|false

指定されたファイルポインタから1行を読み込み、文字列として返します。ファイルの終端に達するか、エラーが発生した場合は false を返します。

サンプルコード

php fgets(STDIN)で標準入力から1行読み込む

1<?php
2
3// 標準入力から1行読み込むサンプルコード
4$line = fgets(STDIN);
5
6// 読み込んだ内容を出力
7if ($line !== false) {
8    echo "入力された内容: " . $line;
9} else {
10    echo "入力がありませんでした。\n";
11}
12
13?>

PHPのfgets関数は、指定されたストリームから1行読み込むために使用されます。このサンプルコードでは、標準入力(STDIN)から1行読み込んでいます。fgets(STDIN)は、ユーザーが入力したテキストを改行文字(\n)まで読み込み、文字列として返します。

引数$streamには、読み込むストリームのリソースを指定します。ここでは、標準入力STDINを指定することで、キーボードからの入力を読み込むように設定しています。オプションの引数$lengthは、読み込む最大バイト数を指定できます。省略した場合は、改行文字に達するまで、またはストリームの終端まで読み込みます。

fgets関数は、読み込んだ文字列を返すか、エラーが発生した場合やストリームの終端に達した場合はfalseを返します。サンプルコードでは、戻り値がfalseでないことを確認し、読み込んだ内容を出力しています。もしfalseが返された場合は、入力がなかったことを示すメッセージを表示します。この関数を使用することで、ユーザーからの入力を簡単に処理できます。標準入力からの読み込みは、コマンドラインツールや簡単なインタラクティブなプログラムを作成する際に役立ちます。

fgets関数は、指定したストリームから1行読み込む関数です。引数には、読み込み元のストリームを指定します。標準入力から読み込む場合は、STDINを渡します。オプション引数として、読み込む最大バイト数を指定できます。

戻り値は、読み込んだ文字列、またはエラー時にfalseを返します。読み込みが成功したかどうかは、戻り値がfalseでないかで確認する必要があります。サンプルコードでは、!== 演算子を使って厳密にfalseかどうかを判定しています。

fgets関数は、改行文字(\n)を含む行全体を読み込みます。読み込んだ文字列には、改行文字が含まれる可能性があるため、必要に応じてtrim関数などで削除してください。標準入力からの読み込みでは、ユーザが何も入力せずにEnterキーを押した場合、空文字列が返されることに注意してください。

PHP fgets でファイルから一行ずつ読み込む

1<?php
2
3// ファイルから一行ずつ読み込むサンプルコード
4$filename = 'sample.txt';
5
6// ファイルが存在するか確認
7if (file_exists($filename)) {
8  // ファイルを読み込みモードで開く
9  $file = fopen($filename, 'r');
10
11  // ファイルが開けたか確認
12  if ($file) {
13    // ファイルの終端に達するまで繰り返す
14    while (($line = fgets($file)) !== false) {
15      // 改行コードを取り除く
16      $line = trim($line);
17
18      // 読み込んだ行を出力する
19      echo $line . PHP_EOL;
20    }
21
22    // ファイルを閉じる
23    fclose($file);
24  } else {
25    echo "ファイルを開けませんでした。" . PHP_EOL;
26  }
27} else {
28  echo "ファイルが存在しません。" . PHP_EOL;
29}
30
31?>

PHPのfgets関数は、ファイルポインタが指すファイルから一行読み込むための関数です。第一引数$streamには、fopen関数などで取得したファイルリソースを指定します。第二引数$lengthはオプションで、読み込む最大バイト数を指定できます。省略した場合、改行文字が現れるか、ファイルの終端に達するまで読み込みます。

サンプルコードでは、まずsample.txtというファイルが存在するかどうかを確認しています。ファイルが存在する場合、fopen関数で読み込みモードでファイルを開き、ファイルリソースを変数$fileに格納します。

次に、whileループを用いてfgets関数で一行ずつファイルを読み込みます。fgets($file)は、読み込んだ行を文字列として返します。ファイルの終端に達した場合はfalseを返します。ループを抜ける条件として、fgetsfalseを返すかどうかをチェックしています。

fgets関数は、改行コードを含んだ文字列を返すため、trim関数を用いて行頭と行末の空白文字と改行コードを取り除いています。その後、echo文で読み込んだ行を出力し、PHP_EOLで改行を挿入しています。

最後に、fclose関数でファイルを閉じます。もしファイルを開けなかった場合、またはファイルが存在しなかった場合は、エラーメッセージを出力します。このサンプルコードは、テキストファイルを一行ずつ読み込み、内容を処理する基本的な方法を示しています。

fgets関数は、ファイルから一行読み込む関数です。引数には、fopen関数などで取得したファイルポインタ($stream)を指定します。2つ目の引数($length)は省略可能で、読み込む最大バイト数を指定できます。

戻り値は、読み込んだ文字列、またはエラー時にfalseです。while文でfgetsの結果を厳密にfalseと比較しているのは、空行を読み込んだ場合に空文字列が返り、falseと評価されないようにするためです。

fgetsは改行コードを含めて読み込むため、多くの場合trim関数で改行コードを取り除く必要があります。Windows環境では改行コードが"\r\n"となるため、環境に合わせて調整してください。必ずfclose関数でファイルを閉じることが重要です。ファイルの存在チェックやfopenの成功確認も忘れずに行いましょう。

関連コンテンツ

【PHP8.x】fgets関数の使い方 | いっしー@Webエンジニア