5
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【PHP関数】fgetsによるファイル操作

Last updated at Posted at 2019-07-23

fgetsとは?

ファイル操作を行う関数の一つで、ファイルポインタの位置から1行分を読み取る関数です。
ファイルから読み取りを行う際には、fopen関数にて対象のファイルをオープンしてファイルポインタの設定を行う必要があり、ファイルをオープンした場合はfclose関数にてファイルポインタをクローズさせる必要があります。

関連する関数

No. 関数 使い方
1 fopen() ファイル(URL)を開く
2 fgets() ファイルポインタより1行を取得する
3 feof() ファイルポインタがファイルの最後に達しているかどうか調べる
4 fclose() オープンされたファイルポインタをクローズする

fopenの使い方

fopenメソッドの第一引数にファイルパスを、第二引数にはアクセス形式を指定します。

<参考>fopenの第二引数(アクセス形式)

アクセス形式を簡単にまとめると以下になります。
読み込み、書き込みをするアクセス形式、ファイルポインタ位置、ファイルがない場合のエラー有無で使い分けを行います。

モード アクセス ファイルポインタ ファイルがない場合
r 読み込み 先頭 エラー
r+ 読み込み/書き出し 先頭 エラー
w 書き出し 先頭 作成
w+ 読み込み/書き出し 先頭 作成
a 書き出し 終端(常に追記) 作成
a+ 読み込み/書き出し 終端(常に追記) 作成
x 書き込み 先頭 エラー
x+ 読み込み/書き出し 先頭 エラー
c 書き込み 先頭(常に追記) 作成
c+ 読み込み/書き出し 先頭(常に追記) 作成

サンプルプログラム

サンプルとして以下のtextファイルを読み込むプログラムを用意しました。

<読込み対象ファイル>

I_Am_Cat.txt
吾輩わがはいは猫である。名前はまだ無い。
どこで生れたかとんと見当がつかぬ。何でも薄暗いじめじめした所でニヤーニヤー泣いてゐた事だけは記憶してゐる。
吾輩はここで始めて人間といふものを見た。しかもあとで聞くとそれは書生といふ人間中で一番獰悪だうあくな種族であつたさうだ。
この書生といふのは時々我々を捕へて煮て食ふといふ話である。
しかしその当時は何といふ考かんがへもなかつたから別段恐しいとも思はなかつた。
ただ彼の掌てのひらに載せられてスーと持ち上げられた時何だかフワフワした感じがあつたばかりである。
掌の上で少し落ちついて書生の顔を見たのがいはゆる人間といふものの見始みはじめであらう。
この時妙なものだと思つた感じが今でも残つてゐる。第一毛をもつて装飾されべきはずの顔がつるつるしてまるで薬缶だ。
その後猫にもだいぶ逢つたがこんな片輪には一度も出会でくはした事がない。のみならず顔の真中があまりに突起している。
さうしてその穴の中から時々ぷうぷうと煙を吹く。どうも咽むせぽくて実に弱つた。
これが人間の飲む煙草といふものである事はやうやくこの頃知つた。

1行のみ出力

オープンしたファイルを1行のみ表示するプログラム

main1.php
<?php    
    /*変数宣言*/
    $file_name = 'I_Am_Cat.txt';    

    // fopenでファイルを開く(「r」は読み込みモードで開くオプション)
    $fp = fopen($file_name, 'r');

    // fgetsで読み込んだファイルの1行を変数に格納する
    $row_txt = fgets($fp);

    // 出力(格納された結果を出力)
    echo $row_txt;

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

全行を出力

オープンしたファイルの全行を表示するプログラム
feof関数にて末尾かどうかの判断を行っていますが、処理としては使用していません(-_-;)

main2.php
<?php    
    /*変数宣言*/
    $file_name = 'I_Am_Cat.txt';    

    // fopenでファイルを開く(「r」は読み込みモードで開くオプション)
    $fp = fopen($file_name, 'r');

    // whileで行末までループ処理
    while (!feof($fp)) {
 
        // fgetsにてファイルポインタの位置から1行分を変数に格納
        $txt = fgets($fp);
   
        // ファイルを読み込んだ変数を出力
        echo $txt;
    }

    // ファイルが最後まで読み込まれたかどうかを確認
    var_dump(feof($fp));

    // fcloseでファイルを閉じる
    fclose($fp);

?>

<Topics>

fgets関数と同じような関数として、ファイルにHTMLタグやPHPタグがあった場合にそれらを削除して読み込んでくれるfgetss関数というものがありますがPHP7.3.0で非推奨の関数となるのでできるだけ使わずに、strip_tags関数などで対応するのが良いのではないかと思います。
(詳しい方居りましたら情報頂きたいです。)

参考:
PHP関数リファレンス(fgetss)
PHP関数リファレンス(strip_tags)

5
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?