PHPのファイル操作について
解決済
回答 2
投稿
- 評価
- クリップ 1
- VIEW 795
PHPの参考書を使って勉強をしています。
そこで「ファイル操作」の章があり、SplFileObjectやfile_put_contents等を使ってファイルの読み書きを勉強しました。またCSVファイルの読み書きもあります。
そこで疑問なのですが、PHPのファイル操作はどのようなときに使うのでしょうか?
掲示板等のWebアプリケーションを開発するときに必要なのですか?
そもそもデータベースがあればファイル操作は必要ないのでしょうか?
どのような場面で必要になるのか教えてください。
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
+4
そこで疑問なのですが、PHPのファイル操作はどのようなときに使うのでしょうか?
質問で「CSVファイルの読み書き」とあるようにCSVファイルの読み書きでもよく使います。
どんな時に使うのかという質問に忠実にこたえるとすれば、「ファイル操作をしたいとき」という答えになってしまいます。場面やソリューションに合わせてどんな関数やクラスがあるのかを覚えておけば良いと思います。
//読み込み
fopen();
fread();
fclose();
//↑ まとめると
file_get_contents();
//書き込み
fopen();
fwrite();
fclose();
//↑ まとめると
file_put_contents();
巨大なファイルを操作する場合はメモリを一気に消費してしまうなどの理由からfile_get_contents()
やfile_put_contensts()
を使えない場合もあります。オブジェクト指向でファイル操作をしたい場合はStandard PHP Librariy(SPL)クラス
を使用します。ファイル操作で複雑な処理を汎用化したい場合は、オブジェクト指向を使ったほうがメンテナンス性、拡張性、量産性に優れます。
掲示板等のWebアプリケーションを開発するときに必要なのですか?
いろいろな理由でファイル操作が必要になる場合もありますが、普通はファイル操作は掲示板アプリケーションに必要ありません。10数年前の掲示板アプリケーションではファイル操作が当たり前だったこともあります。
教科書などでのサンプルは実際の業務で使える場合もありますが、あくまでも関数やメソッドの使い方であって、業務における実際のソリューションの例ではありません。業務におけるソリューションはリクエストによって千差万別で、業務をこなせばこなすほどある程度共通項は見えてくると思います。
そもそもデータベースがあればファイル操作は必要ないのでしょうか?
どのような場面で必要になるのか教えてください。
これは、足し算がわかれば、掛け算はいらないでしょうか?という質問に似ています。ぶっちゃけファイル操作が必要ないと考えることは非常に危険です。
データーベースは確かに非常に便利ですが、データーベースだと冗長になってしまう場合はファイルに書き込んだりすることもあります。
よくあるファイル操作を伴うユースケース
- 業務アプリケーションでCSVやXML形式でデーターベースのデータをエクスポートして、エクセルなどで編集したあと、データーベースにインポートしたい時
- バッチ処理で、CSVファイルやXMLファイルを編集したい時
- 外部アプリケーションとファイル操作で連携したい時(APIがサポートされていない時など)
- 管理アプリケーションで設定ファイルや、テンプレートファイル等のファイルを編集したい時
- キャッシュをファイルに記録しておきたい時
- 多言語翻訳をファイルに記録しておきたい時
- 切り取り、重ね合わせなどの画像操作を行いたい時
- 業務アプリケーションで、外部デバイス(検査装置など)がファイル操作にしか対応していない時
微妙なものもありますがファイル操作は基本ですし、そんなに難しくもないので覚えておいて損はありません。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
+4
PHPでのファイル操作はシステム間でデータを受け渡す時にCSVやエクセルのデータを読み込んだり書き出したりする際によく利用します。
他には画像などのバイナリデータの保存や移動等にも利用します。
簡易な掲示板であればテキストファイルで賄うことも検討できますが、通常はデータベースを使うとデータの管理が堅牢で扱い易くなります。
掲示板のデータを取り扱う分にはデータベースが賄うので、ファイル操作はあまり必要ありませんが画像アップロード等が行われる場合はその画像を取り扱う際にファイル操作が必要です。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 89.99%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
2017/09/08 07:08 編集
2017/09/08 08:07
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 10:56
https://www.mail-archive.com/php-bugs@lists.php.net/msg104931.html
結局、排他に関する処理が一番重要なので、簡単にトランザクションとか楽観・悲観排他のできるDB使った方がずっと楽で、安易な気持ちでファイル操作を使って自分で排他機能を実装しようとしたら初心者は簡単に死ねるよ? という論説には賛成なんですよね。
2017/09/08 10:59
2017/09/08 12:44
知りませんでした。。。勉強になりました。
>結局、排他に関する処理が一番重要なので、簡単にトランザクションとか楽観・悲観排他のできるDB使った方がずっと楽で、安易な気持ちでファイル操作を使って自分で排他機能を実装しようとしたら初心者は簡単に死ねるよ? という論説には賛成なんですよね。
「DB操作とファイル操作、どちらが重要ですか?」という趣旨の質問でしたら、私も賛成です。
質問は「そもそもデータベースがあればファイル操作は必要ないのでしょうか?」とあって、ファイル操作の重要性につての質問です。
ですので「ファイル操作は基本の「キ」ですし、たまに使うので覚えておきましょう」という主張です。(伝わってないかもしれませんが・・・)
2017/09/08 15:40 編集
僕は現在に於いてはそれはもう高等技術だと思っています。根底にある理由は前述の通りですが、基本PHPの利用範囲において、ファイル操作を自分でやる必要性ってもうあんまりないと思うんですよね。
あまりにもDBがお手軽に使える世界になってしまった。
ファイル操作について、読み込みはせいぜい、ymlとかiniとかjson読むくらいでそれはビルトインかPECLの専用関数で出来るし、よくやる書き出しというと画像書き出しぐらいですが、そのへんはGDさんがやってくれちゃうし。PDF, Excel書き出しはライブラリかな。
csvとか日本人限定でSIとかが大好きなんですけど、あれ、fgetcsv()あたり使ってちゃんと実装しようとすると結構大変なんですよね、確か、エンコード関係のあたりで。僕はもうUtilityクラス作っちゃってるのでそのメンバをひたすらコールしてるだけですけどね。
ですから、その辺について「基本』と考えるのはちょっと時代錯誤かな?って思います。ですので、あえてファイル操作を勧めるのであれば排他ロックに関する記述はほしいなぁ…と思ったのです。
2017/09/08 15:41
2017/09/08 15:50
> 結局、排他に関する処理が一番重要なので、簡単にトランザクションとか楽観・悲観排他のできるDB使った方がずっと楽で、安易な気持ちでファイル操作を使って自分で排他機能を実装しようとしたら初心者は簡単に死ねるよ? という論説には賛成なんですよね。
これは僕なりの aro10 さんの
> 通常はデータベースを使うとデータの管理が堅牢で扱い易くなります。
の意訳です。