uiuifree.com

- サイト制作のノウハウと最適化を目指して-

2020.11.15【PHP】ファイルにテキストを書き込む方法

【PHP】ファイルにテキストを書き込む方法

    PHPの基本であるテキストをファイルに書き込む方法を紹介します。テキストファイルを作れるようになると他のシステムとの連携やDBに保存してるデータを管理画面からダウンロードしたりすることが出来るようになります。

    ファイルの扱い方

    プログラムでファイルを扱うには次の流れで扱います

    • ファイルを開く
    • ファイルの読み込み・書き込み
    • ファイルを閉じる

    基本的にはファイルを開いて処理が終わったら閉じます。
    なんでファイルを閉じるの?と思われるかもしれませんが、ファイルを開きぱなしだと

    • システムリソース(メモリ)を占有したまま
    • ファイルを開くとロックがかかるので同じファイルにアクセスしようとした他のシステムがアクセスできなくなる

    などの問題が生じます、PHPではスクリプト処理が完了したら自動的に閉じてくれはしますが不具合の原因になりかねないので必ず閉じましょう。

    ファイルの開き方

    PHPでファイルを開くにはfopen関数を使います。

    fopen

    fopen — ファイルまたは URL をオープンする

    fopen ( string $filename , string $mode [, bool $use_include_path = FALSE [, resource $context ]] ) : resource
    パラメータ
    filename 参照するファイルの名前
    mode ファイルのアクセス形式
    use_include_path インクルードパスを使用の有無
    context コンテキストリソースの指定

    ファイルのモード指定

    mode
    r ファイルポインタを先頭にし読み込み専用で開く
    r+ ファイルポインタを先頭にし読み込み/書き込み用で開く
    w ファイルを空にし書き込み専用で開く
    ファイルが無ければ新規作成
    w+ ファイルを空にし読み書き/書き込み用で開く
    ファイルが無ければ新規作成
    a ファイルポインタを終端にし書き込み専用で開く
    ファイルが無ければ新規作成
    a+ ファイルポインタを終端にし読み込み/書き込み用で開く
    ファイルが無ければ新規作成

    ファイルを出力の方法

    ファイルを出力する主な方法は次の通り

    • fputsでファイルにテキストを追記する
    • fputcsvでCSVのレコードを追記する
    • file_put_contentsでファイルにテキストを上書きする

    テキストファイルを書き込む

    fputを使ってファイルの基本的な書き込みサンプルを紹介します。

    <?php
    $file = fopen('./sample.txt', 'w');
    fputs($file, '書き込みたい');
    fputs($file, 'テキスト');
    fclose($file);
    sample.txt
    書き込みたいテキスト

    fputsを使うことでテキストを書き込むことが確認できました。
    サンプルのようにfputsを複数回記述しても改行はされませんので改行する必要がある場合\r\nなどの改行コードを追記して改行してください。

    CSVレコードを書き込む

    業務でテキストを扱っているとCSVファイルでデータを書き出すことがあります。開発で実装しようとfputsを使おうとするとテキスト内にカンマが入っていたり、改行が入ってたりすると読み出しに問題がでてしまいます。

    PHPではCSVデータを作るためにfputcsvという関数を用意してくれています。 fputcsvは第二引数に配列を与えてあげることでCSVの1レコードを囲み文字エスケープ付きで出力してくれます。

    <?php
    $file = fopen('./sample.csv', 'w');
    fputcsv($file, [
        'ID',
        'カンマ,を含んだ文字',
        "改行を含んだ\r\n文字",
    ]);
    fclose($file);
    sample.csv
    ID,"カンマ,を含んだ文字","改行を含んだ
    文字"

    このように「カンマ」や「改行」を含んだ特殊文字がある場合、囲み文字(ダブルコーテーション)でエスケープ処理をしてくれます。読み込む場合もfgetcsv関数を使うことで正しくCSVを読み取ることが可能です。

    新規ファイルにテキストを書き出す

    特にテキストデータを読み込む必要がなく、ファイルも新規で作成しても良い場合はfile_put_contentsを使うことができます。file_put_contentsはファイル操作を意識することなく書き込むことができ少量の文字数であればお手軽に扱えます。

    file_put_contents('./sample.txt', 'ファイル書き込み');
    

    ####### sample.txt

    ファイル書き込み

    まとめ

    ファイルを書き込めるようになるとシステムの内外でデータを扱えるようになります。慣れてくるとログを解析して集計データを作ったりすることもでき便利です。PHPの基本的な機能になるので覚えてみてください。

    目次
    PROFILE

    このサイトを運営してるuiuifreeです。
    渋谷のベンチャー企業で2年ほど新規事業を担当した後にフリーランスエンジニアにキャリア転換。
    求人サイトの開発が多くエンジニア/看護師/保育士などの分野でサイトを運営しています。

    アウトプット中の技術

    リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)