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

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

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

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

Q&A

解決済

1回答

238閲覧

ファイルシステム関数を使ってフォームに書き込むごとに新しいテキストファイルの生成をしていきたい。

tranders1990

総合スコア25

PHP

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

0グッド

0クリップ

投稿2017/09/05 04:50

お世話になります。
下記のような形でフォームを作り、フォームに書き込んだ内容をテキストファイルに保存し
保存されたテキストファイルの内容を出力するというような形のものを作成しました。
チャットのようなものですね。
そして、フォームから別の人が書き込むとファイルが上書きされてしまうというようなことになるので
ファイルを新しく生成して、新しく生成されたファイルを出力するというような形に書き換えたいのですが
どのように記述すべきかちょっと考えています。

まとめると・・・・・
1.1回以上フォームに書き込みがあった場合、新しいファイルを生成する。
2.新しいファイルを出力する。

という形が理想です。
どうか、皆様からのアドバイスを頂ければと思います。
何卒よろしくお願いいたします。

ちなみにフォームにアクションをつけていないのは同一ファイルに出力がしたかったからです。

html

1<form method="post"> 2<p>お名前:<input type="text" name="handle" placeholder="お名前記入欄"></p> 3<p>投稿内容:<textarea name="contact" placeholder="自由に記入してください" width="300" height="300"></textarea></p> 4<input type="submit"> 5</form>

php

1<?php 2$data = $_POST['handle']; 3$fp = fopen("name.txt","w"); 4fwrite($fp,$data); 5$data2 = nl2br($_POST['contact']); 6$fp = fopen("chat.txt","w"); 7fwrite($fp,$data2); 8fclose; 9 10 11$str1 = file_get_contents("name.txt","a"); 12$str2 = file_get_contents("chat.txt","a"); 13echo 'お名前'.$str1.'<br>'; 14echo '投稿内容:'.$str2.'<br>'; 15echo date('y/m/d h:i:s'); 16?>

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

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

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

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

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

guest

回答1

0

ベストアンサー

フォームから別の人が書き込むとファイルが上書きされてしまうというようなことになる

作り方次第だと思います。書き込み前に対象ファイルのロックを取得し、最新情報を取得、書き込みを行い、
解放することで上書きという現象は回避できるのではないでしょうか。
(それかいっそのことDBにするとか。手軽に始められるSQLiteでも良いですが)

参考:PHPマニュアル:flock()

投稿2017/09/05 06:26

編集2017/09/05 06:36
m.ts10806

総合スコア80850

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

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

tranders1990

2017/09/05 06:30

mts10806さん、ありがとうございます。 対象ファイルのロックを取得っていうのは、それはプログラムに書くのでしょうか? 知識不足ですみません(汗) もう少し詳しくご教授いただければ幸いです。
m.ts10806

2017/09/05 06:32

あ。ロックのところにPHPマニュアルへのリンク貼ってます。 そこの例1に排他ロック(要は他のユーザに触らせない)の書き方のサンプルがあるので、 そちらを参照してください。
tranders1990

2017/09/05 06:33

ありがとうございます。 今、確認しているところです。 確認して理解できたらまた、何らかのアクションを起こしますので、よろしくお願いいたします。
m.ts10806

2017/09/05 06:37

他の見ている人も気づきにくいと思うのでリンク明示しておきました。
tranders1990

2017/09/05 06:38

ありがとうございます。 感謝いたします。
tranders1990

2017/09/05 07:02

ファイルのロックを試してみたのですが、上書き問題は治っていないようなかんじがします・・・(汗) if構文とか使って、既存ファイルに名前や投稿内容が書かれていたら、新しいファイルを生成する、みたいな感じのコードとか、どう書けばいいのでしょう? お手数おかけいたしますが、もしよろしければご教授願えないでしょうか。 大変申し訳ないですが宜しくお願いします。
m.ts10806

2017/09/05 07:34

> ファイルのロックを試してみたのですが、上書き問題は治っていないようなかんじがします・・・(汗) 現象がいまいちイメージがわきません。どのような確認をしてどのような現象が起きたのかなるべく具体的に記述願えませんか? > 既存ファイルに名前や投稿内容が書かれていたら、新しいファイルを生成する どんどん新しいファイルができていくと管理ができなくなるように思います。
m.ts10806

2017/09/05 07:49

やはりデータベースにした方が良いでしょうね。
m.ts10806

2017/09/05 07:49

と書いていたらベストアンサーとなってしまったようですが、問題解決したのでしょうか・・・?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問