とぎぷろべい

包丁研ぎとプログラミングと米国株投資についてのなんやかんや

ファイルの読み込みと書き出しについて(PHP)

f:id:feci:20210727001932j:plain

PHP7

 

PHP7.4.1におけるファイルの読み込みと書き出しについて

<?php

$file = new SplFileObject('aaa/log.txt''w'); //SplFileオブジェクトのインスタンスとlog.txtの作成
$day = new DateTime();                         //DateTimeオブジェクトのインスタンスの作成

$day->setTimeZone(new DateTimeZone('Asia/Tokyo')); //timezoneの上書き
$file->fwrite($day->format('Y-m-d H:i:s'). "\n");  //fwriteメソッドでlog.txtに日付の書き込み

ファイルの読み込みとはインポートのことです。

ファイルの書き出しとはエクスポートのことです。

 

PHPではSplFileObjectクラスというオブジェクトを使って、任意のファイルの読み込みや書き出しを行なえるようになっています。

SplFileObjectクラスは、ファイルのためのオブジェクト指向のインターフェースらしいです。

 

ちなみにSplFileObjectとは、「Standard PHP Libraryのファイルをあつかうオブジェクト」という意味です。

 

SplFileObjectクラスにはコンストラクターが存在するので、インスタンスの作成時に各種のパラメータを指定する必要があります。

SplFileObjectクラスのコンストラクターの各種パラメータは、下記のようになっています。

 

public SplFileObject::_construct(
    string $filename,                   //ファイル名の指定・省略不可
    string $mode = "r",               //ファイルのオープンモード
    bool $useIncludePath = false,   //include_pathを探索するか否か
    ?resource $context = null       //?
)

 

このようにSplFileObjectクラスのコンストラクターのパラメータは、第1引数は省略不可であり、第2~第4までの引数の指定は任意となっています。

第2引数のファイルのオープンモードの指定については、以下の一覧を参照してください。

 

'r'   書き出しのみでオープン。ファイルポインタをファイルの先頭に置く。
'r+' 読み込み&書き出し用にオープンするr。

'w'  書き出しのみでオープン。ファイルポインタをファイルの先頭に置く。ファイルサイズを0にする(上書き)。指定されたファイルが存在しない場合は新規作成を試みる。
'w+' 読み込み&書き出し用にオープンするw。

'a'  書き出しのみでオープン。ファイルポインタをファイルの終端に置く。指定されたファイルが存在しない場合は新規作成を試みる。書き込みは常に追記となる(上書きではない)。
'a+' 読み込み&書き出し用にオープンするa。

'x'  書き込みのみでオープン。ファイルポインタはファイルの先頭に置く。指定したファイルが存在する場合はE_WARNINGレベルのError発生。指定したファイルが存在しない場合は新規作成を試みる。
'x+' 読み込み&書き出し用にオープンするx。

'c'  書き出しのみでオープン。ファイルポインタはファイルの先頭に置く。指定したファイルが存在しない場合は新規作成を試みる。'w'のようにファイルサイズを0に切り詰めない(上書きしない)。'x'のように関数コールを失敗させない。
'c+' 読み込み&書き出し用でオープンするc。
'e'  オープンされたファイル記述子にclose-on-execフラグを設定する

 

 

というわけなので、上記スクリプトの $file = new SplFileObject('aaa/log.txt', 'w'); では、「このPHPと同じディレクトリにあるaaaフォルダ内にあるlog.txtを開いてね。もしaaaファイル内にlog.txtが存在しなければ作ってね。あとそのファイルに何か書き込む際は都度上書きしてファイルサイズは0にしておいてね。」という命令をしています。

 

あとは$fileからfwriteメソッドを使ってlog.txtに書き込む内容を指定してそのスクリプトをターミナルから実行してやれば、aaaフォルダ内にあるlog.txtにfwriteメソッドで指定した文字列が上書きされています。

今回はDateTimeオブジェクトを使って日付を取得したものを指定していますから、log.txt内には 2021-10-04 00:00:00 という文字列が書き込まれました。

 

 

以上です。