質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

233閲覧

PHPのファイル操作について

gsuisk

総合スコア72

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

1クリップ

投稿2017/09/07 16:35

PHPの参考書を使って勉強をしています。

そこで「ファイル操作」の章があり、SplFileObjectやfile_put_contents等を使ってファイルの読み書きを勉強しました。またCSVファイルの読み書きもあります。

そこで疑問なのですが、PHPのファイル操作はどのようなときに使うのでしょうか?

掲示板等のWebアプリケーションを開発するときに必要なのですか?

そもそもデータベースがあればファイル操作は必要ないのでしょうか?

どのような場面で必要になるのか教えてください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

そこで疑問なのですが、PHPのファイル操作はどのようなときに使うのでしょうか?

質問で「CSVファイルの読み書き」とあるようにCSVファイルの読み書きでもよく使います。

どんな時に使うのかという質問に忠実にこたえるとすれば、「ファイル操作をしたいとき」という答えになってしまいます。場面やソリューションに合わせてどんな関数やクラスがあるのかを覚えておけば良いと思います。

php

1//読み込み 2fopen(); 3fread(); 4fclose(); 5//↑ まとめると 6file_get_contents(); 7 8//書き込み 9fopen(); 10fwrite(); 11fclose(); 12//↑ まとめると 13file_put_contents();

巨大なファイルを操作する場合はメモリを一気に消費してしまうなどの理由からfile_get_contents()file_put_contensts()を使えない場合もあります。オブジェクト指向でファイル操作をしたい場合はStandard PHP Librariy(SPL)クラスを使用します。ファイル操作で複雑な処理を汎用化したい場合は、オブジェクト指向を使ったほうがメンテナンス性、拡張性、量産性に優れます。

掲示板等のWebアプリケーションを開発するときに必要なのですか?

いろいろな理由でファイル操作が必要になる場合もありますが、普通はファイル操作は掲示板アプリケーションに必要ありません。10数年前の掲示板アプリケーションではファイル操作が当たり前だったこともあります。

教科書などでのサンプルは実際の業務で使える場合もありますが、あくまでも関数やメソッドの使い方であって、業務における実際のソリューションの例ではありません。業務におけるソリューションはリクエストによって千差万別で、業務をこなせばこなすほどある程度共通項は見えてくると思います。

そもそもデータベースがあればファイル操作は必要ないのでしょうか?

どのような場面で必要になるのか教えてください。

これは、足し算がわかれば、掛け算はいらないでしょうか?という質問に似ています。ぶっちゃけファイル操作が必要ないと考えることは非常に危険です。

データーベースは確かに非常に便利ですが、データーベースだと冗長になってしまう場合はファイルに書き込んだりすることもあります。

よくあるファイル操作を伴うユースケース

  • 業務アプリケーションでCSVやXML形式でデーターベースのデータをエクスポートして、エクセルなどで編集したあと、データーベースにインポートしたい時
  • バッチ処理で、CSVファイルやXMLファイルを編集したい時
  • 外部アプリケーションとファイル操作で連携したい時(APIがサポートされていない時など)
  • 管理アプリケーションで設定ファイルや、テンプレートファイル等のファイルを編集したい時
  • キャッシュをファイルに記録しておきたい時
  • 多言語翻訳をファイルに記録しておきたい時
  • 切り取り、重ね合わせなどの画像操作を行いたい時
  • 業務アプリケーションで、外部デバイス(検査装置など)がファイル操作にしか対応していない時

微妙なものもありますがファイル操作は基本ですし、そんなに難しくもないので覚えておいて損はありません。

投稿2017/09/07 21:06

Tomak

総合スコア1652

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/09/07 22:13 編集

file_put_contents() は使うなら PHP 5.2.6 以降である事を確認するよう補足してほしいな…とは、思います。
Tomak

2017/09/07 23:07

質問に「SplFileObjectやfile_put_contents等を使ってファイルの読み書きを勉強しました」とあるので、特に気にしませんでした。 file_put_contents()は「php5以上」で使えて、LOCK_EXオプションは「php-5.1.0」で追加されたらしいです。つまり、SPLの「SplFileObjectクラス(php-5.1.0以上)」が使える時点で「file_get_contens(), file_put_contents()」を使えるようです。 -- http://php.net/manual/ja/function.file-put-contents.php http://php.net/manual/ja/function.file-get-contents.php http://php.net/manual/ja/class.splfileobject.php > file_put_contents() は使うなら PHP 5.2.6 以降 これは、なにかバグがあってこのバージョン以降じゃないとまともに使えないとかいうことでしょうか?
退会済みユーザー

退会済みユーザー

2017/09/08 01:56

それが、LOCK_EXが正常に動作しないらしいんです。これがバグリポート https://www.mail-archive.com/php-bugs@lists.php.net/msg104931.html 結局、排他に関する処理が一番重要なので、簡単にトランザクションとか楽観・悲観排他のできるDB使った方がずっと楽で、安易な気持ちでファイル操作を使って自分で排他機能を実装しようとしたら初心者は簡単に死ねるよ? という論説には賛成なんですよね。
退会済みユーザー

退会済みユーザー

2017/09/08 01:59

ですからまぁ、それを追記してもらえたら僕は何も説明する必要がなくなるし、場合によっては沢山書いてくれたTomakさんの回答がベストアンサーになって、みんな幸せかなぁ…って思ったのです。
Tomak

2017/09/08 03:44

>それが、LOCK_EXが正常に動作しないらしいんです。これがバグリポート 知りませんでした。。。勉強になりました。 >結局、排他に関する処理が一番重要なので、簡単にトランザクションとか楽観・悲観排他のできるDB使った方がずっと楽で、安易な気持ちでファイル操作を使って自分で排他機能を実装しようとしたら初心者は簡単に死ねるよ? という論説には賛成なんですよね。 「DB操作とファイル操作、どちらが重要ですか?」という趣旨の質問でしたら、私も賛成です。 質問は「そもそもデータベースがあればファイル操作は必要ないのでしょうか?」とあって、ファイル操作の重要性につての質問です。 ですので「ファイル操作は基本の「キ」ですし、たまに使うので覚えておきましょう」という主張です。(伝わってないかもしれませんが・・・)
退会済みユーザー

退会済みユーザー

2017/09/08 06:42 編集

> ファイル操作は基本の「キ」ですし、たまに使うので覚えておきましょう 僕は現在に於いてはそれはもう高等技術だと思っています。根底にある理由は前述の通りですが、基本PHPの利用範囲において、ファイル操作を自分でやる必要性ってもうあんまりないと思うんですよね。 あまりにもDBがお手軽に使える世界になってしまった。 ファイル操作について、読み込みはせいぜい、ymlとかiniとかjson読むくらいでそれはビルトインかPECLの専用関数で出来るし、よくやる書き出しというと画像書き出しぐらいですが、そのへんはGDさんがやってくれちゃうし。PDF, Excel書き出しはライブラリかな。 csvとか日本人限定でSIとかが大好きなんですけど、あれ、fgetcsv()あたり使ってちゃんと実装しようとすると結構大変なんですよね、確か、エンコード関係のあたりで。僕はもうUtilityクラス作っちゃってるのでそのメンバをひたすらコールしてるだけですけどね。 ですから、その辺について「基本』と考えるのはちょっと時代錯誤かな?って思います。ですので、あえてファイル操作を勧めるのであれば排他ロックに関する記述はほしいなぁ…と思ったのです。
退会済みユーザー

退会済みユーザー

2017/09/08 06:41

あと、全く関係ないですけど、ぱっと見た時に「キ」が目に飛び込んできて、「いちいち絡んでくるなよ、この○チガイ」って言われてるのかと思ってちょっと凹みました。
退会済みユーザー

退会済みユーザー

2017/09/08 06:50

なお、 > 結局、排他に関する処理が一番重要なので、簡単にトランザクションとか楽観・悲観排他のできるDB使った方がずっと楽で、安易な気持ちでファイル操作を使って自分で排他機能を実装しようとしたら初心者は簡単に死ねるよ? という論説には賛成なんですよね。 これは僕なりの aro10 さんの > 通常はデータベースを使うとデータの管理が堅牢で扱い易くなります。 の意訳です。
guest

0

PHPでのファイル操作はシステム間でデータを受け渡す時にCSVやエクセルのデータを読み込んだり書き出したりする際によく利用します。
他には画像などのバイナリデータの保存や移動等にも利用します。
簡易な掲示板であればテキストファイルで賄うことも検討できますが、通常はデータベースを使うとデータの管理が堅牢で扱い易くなります。
掲示板のデータを取り扱う分にはデータベースが賄うので、ファイル操作はあまり必要ありませんが画像アップロード等が行われる場合はその画像を取り扱う際にファイル操作が必要です。

投稿2017/09/07 17:07

aro10

総合スコア4106

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

gsuisk

2017/09/10 12:33

ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問