【PHP】file_put_contents関数を使って文字列をファイルに書き込む!
PHPで、文字列をファイルに書き込むにはfile_put_contents()関数というものが使われます。
この関数は、fopen()、fwrite()、fclose()を続けて実行してデータをファイルに書き込む動作を一回で行うことができます。
PHPで、文字列をファイルに書き込む関数 file_put_contents()について、フライテック所属のフリーランスエンジニアがわかりやすく解説します。
目次
file_put_contents()関数とは
PHPのfile_put_contents()関数は、ファイルに文字列を書き込むために使用される組み込み関数です。
file_put_contents()関数は、ユーザーが書き込みたいファイルをチェックし、ファイルが存在しない場合は、新しいファイルを作成します。
ユーザーが書き込みたいファイルのパスと書き込む必要のあるデータは、パラメーターとして関数に送信され、成功するとファイルに書き込まれたバイト数が返され、失敗するとfalseが返されます。
存在する場合は上書きされるようになります。
file_put_contents()の使い方
構文
file_put_contents()関数は以下のようになります。
1 |
file_put_contents($ファイル名, $データ内容[, $オプションフラグ][, $コンテキスト]) |
file_put_contents()には4つパラメータがあります。
パラメータについて解説していきましょう。
パラメータ
まず、file_put_contents()関数は、2つの必須パラメータと2つのオプションパラメータを受け入れます。
それぞれのパラメータについて解説していきましょう。
パラメータ | 説明 |
---|---|
$ファイル名 | 書き込みたいファイルを指定します。ファイルが存在しない場合、ファイルを作成します |
$データ内容 | ファイルに書き込む必要のあるデータを指定します。文字列、配列、またはデータストリームを指定できます。 |
$オプションフラグ | FILE_USE_INCLUDE_PATH、FILE_APPEND、LOCK_EXなど、ファイルにデータを書き込む方法を指定するために 使用されるオプションのパラメーターです。これらを第3引数に渡すことで設定できます。 組み合わせる際には、論理 OR (|) 演算子で連結します。 |
$コンテキスト | これは、カスタムコンテキストまたはストリームの動作を指定するために使用されるオプションのパラメーターです。 |
戻り値
成功するとファイルに書き込まれたバイト数を返し、失敗するとfalseを返します。
エラーと例外
file_put_contents()関数はブール値のfalseを返しますが、
falseと判断する非ブール値を返す場合もあります。
また、指定されたディレクトリが無効な場合、この関数はコンテンツの書き込みに失敗します。
file_put_contents()のサンプルコード
新しいファイルへの書き込み
新しいファイルへの書き込みを行ってみます。
まずは、test.txtというテキストファイルにテキストを入力してみます。
するとこのようになります。
例
1 2 3 4 |
<?php $data = "ここに「フライテックでリッチになる」というテキストを入力してみます。\n"; file_put_contents("./test.txt", $data); ?> |
出力結果
$ test.txt
ここに「フライテックでリッチになる」というテキストを入力してみます。
test.txtの中身を表示すると「ここに「フライテックでリッチになる」というテキストを入力してみます。
という文字列が書き込まれていることが確認できます。
既存のファイルの上書き
次に先ほどのファイルの内容を上書きしてみましょう。
上書きの仕方は、先ほどと同じようにコードを記載します。
例
1 2 3 4 |
<?php $data = "フリーランスならフライテック\n"; file_put_contents("./test.txt", $data); ?> |
出力結果
$ test.txt
フリーランスならフライテック
test.txtの中身を表示すると「ここに「フライテックでリッチになる」というテキストを入力してみます。
という文字列から「フリーランスならフライテック」という文字列に上書きされていることが確認できます。
つまり、ファイルが存在しない場合は、作成され、存在している場合では上書きになります。
既存のファイルに追記
続いて、先ほど上書きしたファイルに内容を追記してみましょう。
方法としましては、「$オプションフラグ(第3引数)」にFILE_APPENDのオプションを渡すことで
ファイルに追記することが可能になります。
さきほど上書きした「text.txt」に以下のプログラムでもう一度ファイルに書き込んでみましょう。
1 2 3 4 |
?<php $data = "フライテックの案件紹介は地元に強い\n"; file_put_contents("./test.txt", $data, FILE_APPEND); ?> |
出力結果
$ test.txt
フリーランスならフライテック
フライテックの案件紹介は地元に強い
上記のプログラムの実行後にファイルを表示すると、
2行目に「フライテックの案件紹介は地元に強い」という言葉が追加されているのが確認できます。
このようにオプションフラグでFILE_APPENDを引数として渡すと、既存のファイルへ追記することができます。
また、冒頭にも紹介した、LOCK_EXの引数についても解説します。
LOCK_EXをオプションフラグの引数として渡すことで書き込み中にファイルをロックし、
他の人が同時にファイル処理を行えないようにすることができます。
1 2 3 4 5 6 7 |
<p class="blog_p" style="font-size: 20px;"><strong>例</strong></p> <?php $data = "ファイルをロックする\n"; file_put_contents("./test.txt", $data, FILE_APPEND | LOCK_EX); ?> |
出力結果
$ lock.txt
フリーランスならフライテック
フライテックの案件紹介は地元に強い
ファイルをロックする
このように記載することでtest.txtはファイルの最後にFILE_APPENDによって「ファイルをロックする」
という文字列が追記され、LOCK_EXによって他の人が同時にファイルに書き込めないようにすることができます。
エラーと例外
エラーや例外が発生する場合は、ブール値のfalseを返すようになります。
次の例を見てみましょう。
例
1 2 3 4 5 6 7 8 |
$load = file_put_contents('./test.txt', '気になるなら「フライテック」で検索', FILE_APPEND); if ($load) { print('ファイルへの書き込みが完了しました'); } else { print('書き込みに失敗しました。フォルダの権限などを確認してください。'); } ?> |
出力結果
書き込みに失敗しました。フォルダの権限などを確認してください。
load変数がfalseを返し、「書き込みに失敗しました。フォルダの権限などを確認してください。」
と表示されています。これは、ファイルのディレクトリが無名である
書き込んだ時にエラーになっている
PCの容量が足りない、
ブラウザの設定が正しくないなどが挙げられます。
ST
株式会社flyhawkのSTです。フライテックメディア事業部でのメディア運営・ライター業務なども担当。愛機はMac Book AirとThinkPad。好きな言語:swift、JS系(Node.js等)。好きなサーバー:AWS。受託開発やプログラミングスクールの運営をしております。ご気軽にお問い合わせください。