PHPでテキストデータをファイルに出力する方法

ファイルに出力するといってもログを出力するだけならerror_log()を使えば簡単です。

≫ PHPのerror_log関数を使ってログを出力する方法

今回は、データベースに保存するほどでも無いデータをファイルにでも吐き出しておくか!という趣旨のファイル出力です。

他にもバッチで他システムに連携するデータを一時的にファイルに出力しておくなんてこともあるかもしれません。

そんな場合のテキストデータをファイルに出力する方法を紹介します。

改行含むテキストデータをファイルに出力

ファイルの出力には file_put_contents() を使います。

file_put_contents($出力先, $データ)

$出力先は、ファイルの出力先です。絶対パスでも相対パスでもいけます。

$データは、出力するデータです。配列でも大丈夫です。

 

今回は、配列をJSONに変換してファイルに出力するコードを作ってみました。

このコードを書いたPHPと同じ階層に user.json というファイルが出力されます。

中身は以下のようになりました。

普通にJSON形式のデータですね。

出力したファイルをダウンロード

出力したデータをファイルとしてダウンロードすることもできます。

サーバー上に保存しないでダウンロードする場合は file_put_contents() は使いません。

 

その為には以前書いたファイルをダウンロードする方法の記事を先にみてください。

下のサンプルコード内の「ダウンロードするおまじない」の部分について説明しています。

header情報をダウンロード用にして、JSON形式の文字列に変換したデータをそのままechoするだけです。

この前後とかでHTMLタグとか書いてしまうとHTMLも含まれたデータがダウンロードされてしまいます。

文字コードを指定して出力

サーバーに出力するにしてもダウンロードするにしても、文字コードを指定したい場合があると思います。

文字コードを指定しなければ、上の例だとPHPファイルと同じ文字コードになってしまいます。

 

PHPファイルはUTF-8だけど、ファイルはShift-JISで出力したい場合は、出力する前に mb_convert_encoding() を使って文字列の文字コードを変換します。

サンプルは以下の通りです。

これで出力された user.json は Shift-JIS になりました。

ダウンロードする場合も基本は同じで、出力する前に変換するだけです。

まとめ

一般的にPHPでファイル出力をしたいという人は、たぶんfile_put_contents()が解決策ではないでしょうか?

ログのようにずっと追記していく方法もあります。

ダウンロードも使える場面ありそうですね。

 

僕は実はCSVを出力しようとして「ファイル出力」について調べていたのですが、CSVの場合は専用の簡単な関数がありました。

≫ PHPの配列をCSVデータとしてファイルに出力する方法とCSVを読み込み配列にする方法

コロナの影響でみんな大変だから俺もなんかできること

僕は福井県に住んでいるのですが、戦時中に福井大空襲にあい、その直後に大震災にあってボロボロになった話をおばあちゃんに聞きました。

それでも復活することができ、不死鳥の町と言われるようになりました。

先人達には心から感謝し尊敬します。

リーマンショック、東日本大震災、コロナと数十年に一度と言われる被害が立て続けに起きていますが、僕たちは強いです。

今は苦しいかもしれませんがきっと復活できます。

僕は低学歴ですし小さな小さな粒でしかないですが、プログラミングに関しては必死に勉強し15年以上ごはんにありつけています。

プログラミングを勉強している人の役に立てるほどのスキルはあると思っています。

なので1人でもんもんと悩んでいる若手のエンジニア向けに質問を受け付けることにします。

自宅で待機されている間もパソコンとインターネットがあればプログラミングの勉強はできます。

  • PHP
  • SQL
  • HTML・CSS
  • jQuery

とは言ってもいきなり答えを聞いていたのではなかなか成長できないと思うのです。

なので質問の際には次のことをご連携ください。

  • 何をやりたいか
  • どんなことを調べたか、検索キーワードと参考にしたページのURL
  • 調べた結果どこが分からないか
  • できるなら試したコード

メッセージいはとりあえずTwitterにでもください。

質問はこちら

すぐに返事できないかもしれませんがご了承ください。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA