【php】ファイルの中身を空にする方法を解説!サイズをゼロにして削除しよう!
この記事からわかること
- phpでファイルの中身を消す方法【3選】
- ftruncate関数の挙動
- file_put_contents関数の挙動
- fopen関数の挙動
index
[open]
\ アプリをリリースしました /
友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-
posted withアプリーチ
phpでログ用やデータ格納用に追記や上書きしているテキストファイルやJSONファイルの中身を動的に空にする方法をご紹介します。
方法は3通りありますので自分の状況を見ながらあったものを使用してみてください!
関連記事:PHPでJSONファイルの扱い方を徹底解説!作成、追記、読込などの基本的な動作と注意するべきポイントとは?
phpでファイルの中身を空にする方法【3選】
ファイルの中身だけを空にする理屈を先に解説しておきます。勘の良い人はこの時点で何の関数を使うか分かるかもしれないですね!
ファイルの中身を空にするロジック
- ファイルの中身を""で上書きする
- ファイルのサイズを0にする
仕組みはこの2通りになります。それでは実際のコードを解説していきます。
前提として変数$fileにはファイルのパスが入っていることとします。
方法1:file_put_contents関数
file_put_contents($file,'');
// ファイルの中身を''で上書き
直感的でとてもシンプルなコードです。
file_put_contents関数はfopen関数などを使わなくてもファイルを操作できる便利な関数です。指定したファイルに対して書き込み処理をするのがこの関数の役割です。
仕組みとしては指定したファイルに「」(空文字)で上書きすることによりファイルの中身をなくしています。
file_put_contents関数は引数に「FILE_APPEND」を指定することで追記モードにすることも可能です。逆に何も指定しなければ上書きモードになるので既存のデータは失われ、追加したデータのみがファイルに記述されます。
関連記事:file_put_contents関数の挙動まとめ
メリット
- コードが1行で済む
- ファイルの中身を空にするだけでなく好きな内容に書き換えられる
ファイルの中身を消したいだけであればこのコードがおすすめです。1行で済むため可読性も高いのでぜひコピペして使ってみてください。
方法2:fopen関数
$handle = fopen($file,'w+');
// ファイルハンドル取得時に中身をクリア
fclose($handle);
次はファイルシステム関数の一連の流れを使用したコードです。
一連の流れは基本的に「ファイルを開く→書き込みや読み込み→ファイルを閉じる」といった流れで操作していきます。
その最初の操作fopen関数の特性を利用してファイルの中身を空にしていきます。fopen関数は引数に決められた値を指定することで「オープンモード」を変更することができます。
オープンモードとはファイルを開く方法の違いです。表で違いをおさらいしておきます。
値 | 説明 | ファイルがある場合 | ファイルがない場合 |
---|---|---|---|
r | 読み込みのみ | - | - |
r+ | 読み込み/書き込み | - | - |
w | 書き込みのみ | ファイルの内容をクリア | 新規作成 |
w+ | 読み込み/書き込み | ファイルの内容をクリア | 新規作成 |
a | 書き込みのみ | 既存のデータに追記 | 新規作成 |
a+ | 読み込み/書き込み | 既存のデータに追記 | 新規作成 |
x | 書き込みのみ | エラー | 新規作成 |
x+ | 読み込み/書き込み | エラー | 新規作成 |
オープンモードの「w/w+」の仕組みを利用します。
「w/w+」モードではファイルが存在する時にファイルの中身をクリアしてくれます。クリアにしている仕組みはファイルのサイズを0にすることで中のデータを保持できなようにしているのです。
メリット
- ファイル組み込み関数の最初の流れで使える
- 値を変えるだけで挙動を簡単に変更できる
このコードは後から変更した時に値を変えるだけで追記モードにしたり、エラーを起こさせたりと簡単に挙動を変化させることができます。
またファイル組み込み関数の最初の流れで使えるのでfile_put_contents関数のように一括で終わらせたくない時にも使えます。
方法3:ftruncate関数
$handle = fopen($file, 'r+');
// 書き込みできるモードで開く
ftruncate($handle,0);
// ファイルサイズをゼロにする
fclose($handle);
「ftruncate関数」はファイルのサイズを操作できる関数です。サイズに「0」を指定することでファイルの中身を空にしてくれます。
自分ではなく他の人が見た時にファイルサイズを変更する関数であるこのコードがあるなら「ファイルサイズの変更をしているんだな」と伝わりやすくなります。
またサイズを好きな値に変えれば好きな大きさのファイルに変更することも可能です。
注意点としてオープンモードは書き込みができるモードでないといけません。
メリット
- ファイルの中身を空にしていることがわかりやすいコード
- モードを「w/w+」以外で開いている時も使用できる
このコードは可読性の高さと保守性の高さが最大のメリットかもしれません。
今回紹介した方法が誰かの役に立つと嬉しいです。
まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。
ご覧いただきありがとうございました。
おすすめ記事:PHP技術者試験(初級)を受けた感想とオススメ参考書