BookmarkLINEPHPでファイル操作を行う、例えばファイルの内容を読み込んでそれについて処理を行ったり、ファイルを作成してその中に書き込みを行ったりなどがありますが、その為にはどんな関数やクラスを用いたら処理が行えるでしょうか。今回は、外部ライブラリは不要で利用できるPHPの基本的なファイル操作クラスや関数を用いてファイル操作を行っていきます。今回の開発環境に関しては以下の通りです。7.2デモではPHP7を使用しますが、最低でもPHP5.1以上であれば進めていけます。基本的なファイルの読み出しまずは最も基本的なファイルの読み込みからです。以下の関数を利用する事でファイルの読み込みを行う事が出来ます。fopen()ファイルもしくはURLを開くfgets()ファイルポインタから1行取得するfeof()ファイルポインタがファイルの後端に達しているかどうか調べるfclose()オープンされたファイルポインタをクローズするこれらを利用して、以下のようにファイルを読み込み出力する事が出来ます。ファイルをクローズするfclose($handle);fopen()メソッドの第一引数にファイルパスを、第二引数にはアクセス形式を指定しています。読み込みなので「rb」を指定します。アクセス形式を簡単にまとめると以下になります。失敗しE_WARNINGレベルのエラーを発生させます。※PHP7より「e」モードが追加されましたがここでは割愛します。アクセス形式について公式では、互換性維持のためにfopen()でファイルをオープンする時は常に「b」フラグを指定することを推奨しています。読み込みなら「rb」書き込みなら「wb」や「ab」のように指定するのが良いです。while文でループし1行ずつ出力を行っていますが、その際の評価式は「fgets()メソッドによって1行データが取得出来たかどうか」になっています。取得できない=最後まで取得済み、もしくはエラーの場合はループが終了します。最後に、fclose()メソッドでファイルをクローズします。while文だけでなくfor文でループ処理を行えます。var_dump($data);}1行取得し、ファイルポインタの終端に達していなければ再度取得する。いう流れでループが行われます。1行取得とHTMLタグ除去fgets()とは別にfgetss()という関数があります。1文字違いがとてもややこしい関数ですが、このメソッドはファイルポインタから1行取り出し、コンテンツのHTMLタグを取り除きます。以下のようなテキストファイルを用意しました。sample.txt<p>1</p><p>2</p><p>3</p><p>4</p><p>5</p><p>6</p><p>7</p><p>8</p><p>9</p><p>10</p>Pタグで囲まれたリストですが、これをfgetss()で取り出すと結果は以下になります。10fclose($handle);ちなみに、以下のようにする事で除去するHTMLタグを除外する事ができます。"<p><a>");第二引数には除去対象とするデータ長を、第三引数には除去を行わないHTMLタグを指定します。CSV/TSVファイルの読み込みCSVやTSVファイルを読み込む場合はfgetcsv()を使います。print_r($data);}fclose($handle);ファイルをオープンする部分は通常と同じですが、ファイルポインタから1行取得する時に、fgetcsv()を使う事で、カンマ区切りであるCSVの行データを配列として取得してくれます。TSVファイルを処理したい場合は第二・第三引数を指定します。print_r($data);}fclose($handle);第二引数には対象とする1行のデータ長を、第三引数にはデミリタとしてタブ「\t」を指定する事で、タブ区切りであるTSVファイルを読み込む事が出来ます。CSV・TSVに限らず、ファイル内コンテンツに日本語などのマルチバイト文字を含む場合でファイルがUTF-8ではない場合は文字化けするので、文字コードの変換を行ってからデータを処理します。$data);ファイルへの書き込みファイルへ書き込みを行うにはfwrite()もしくはfputs()を利用します。fputs()はfwrite()のエイリアスなので、どちらを使っても同じです。クローズfclose($handle);書き込みモードでファイルをオープンした後、ランダムに生成した乱数をfwrite()で書き込んでいます。これで2行書き込みが行われた事になります。CSV/TSVファイルへの書き込みCSVやTSVファイルへ書き込みを行う場合はfputcsv()を使います。ファイルをクローズfclose($handle);書き込む行データを配列としてfputcsv()へ渡す事で書き込みが行われます。日本語などのマルチバイト文字を扱う場合はUTF-8からShift-JISへ文字コードの変換を行う事で文字化けは起こりません。$record);TSVファイルへの書き込みを行う場合は、fputcsv()の第三引数でタブのデミリタを指定する事でタブ区切りでの書き込みが行われます。ファイルをクローズfclose($handle);file_get_contents()/file_put_contents()ローカルやリモートのファイル内容を文字列として読み込んだり書き込んだりするには、file_get_contents()やfile_put_contents()関数を使います。ファイルの内容を文字列としてファイルに読み込むには、file_get_contents関数を使います。10指定したファイルの内容を全て文字列として読み込んでいます。反対に、データをファイルへ書き出すには、file_put_contents()関数を使います。Library)拡張モジュールのファイル操作クラスです。Library)は、標準的な処理の為のインターフェイスやクラスを集めた拡張モジュールです。5.0.0以降はデフォルトで組み込まれています。基本的なデータ読み出しまずは、基本的なテキストファイルからのデータ読み出しです。10コンストラクタにファイルパスを渡し、SplFileObjectクラスをインスタンス化します。これだけであとはforearchでループさせればデータを1行ずつ読み出す事が出来ます。CSVファイルのデータを読み出すCSVファイルのデータを読み出すには以下のように記述します。echo'</pre>';}setFlags()メソッドでCSVを読み出す為の設定を行っています。引数に渡しているのはSplFileObjectクラスの定数です。列として行を読み込むREAD_AHEAD先読み/巻き戻しで読み出すSKIP_EMPTY空行は読み飛ばすDROP_NEW_LINE行末の改行を読み飛ばすフラグセットを行ったら、あとは通常通りループで回す事で行単位で配列を取得できます。3月5日)TSVファイルのデータを読み出すCSVファイルはカンマ区切りですが、TSVファイルはタブ区切りです。基本的な記述はCSVと同じですが、TSVファイルを読み出す時はsetCsvControl()メソッドでデミリタをタブに切り替えるだけです。print_r($line);}データの書き出しSplFileObjectクラスでファイルにデータを書き出すには以下のようにします。data");コンストラクタの第二引数に書き込みのアクセス形式を渡してインスタンス化を行います。あとはfwrite()メソッドで書き込みを行います。CSVファイルへ書き出すには、fputcsv()メソッドを使います。$file->fputcsv($d);}マルチバイトを扱う場合は文字コードをUTF-8へ変換します。$file->fputcsv($line);}TSVファイルへの書き出しも、基本はCSVと同じです。読み込みと同じように、setCsvControl()メソッドでデミリタをタブに切り替えて書き込みを行います。$file->fputcsv($d);}まとめファイル操作はPHPの中でも基本的な処理ですが、実務で実装する場合にはデータを書き出したり読み出したりと、重要な機能になります。適切な処理をお行い、安定した機能を実装できるように基本をしっかり押さえておきましょう。SESを使ってAPIメール送信を行う(Mailableクラス&SimpleEmailService)2019.12.3MySQL8.0.16で追加されたCHECK制約を試してみる。RitoLaboこのサイトについて利用規約プライバシーポリシ。