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

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

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

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

Q&A

解決済

1回答

360閲覧

フォーム投稿内容に番号振り

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

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

0グッド

0クリップ

投稿2017/11/25 11:04

<?php $fp = fopen("テキストファイル.txt", "r+"); flock($fp, LOCK_EX); $count = 0; while(fgets($fp)!==false){ $count++; } $next = $count + 1; fwrite($fp, $count . '<>' . PHP_EOL); fwrite($fp, filter_input(INPUT_POST, 'name') . '<>' . PHP_EOL); fwrite($fp, filter_input(INPUT_POST, 'comment') . '<>' . PHP_EOL); fwrite($fp, date('Y年m月d日H時i分') . PHP_EOL); flock($fp, LOCK_UN); fclose($fp); ?> ```###前提・実現したいこと 1,投稿者A コメント 時間 2,投稿者B コメント 時間 3,投稿者C . . . ###発生している問題・エラーメッセージ

実際作成されたテキストファイルを見ると、0の次から4の倍数で番号が振られていきます…。
$count + 1
でひとつづつ数字が上がっていくと思っていましたが、4というのが謎過ぎて。
ご教示頂けますでしょうか??

###補足情報(言語/FW/ツール等のバージョンなど) より詳細な情報

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

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

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

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

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

guest

回答1

0

ベストアンサー

ファイルの書き込み処理が、 while の外にあるのが良くないのかもしれません

わかりませんが たぶん、こう書くといいのかもしれません

php

1<?php 2 3// ファイルを読み込み、その内容をもとに変換処理を加えて書き出し先に出力 4function my_main() { 5 $fp_read = fopen("text.txt", "r+"); 6 $fp_write = fopen('out.txt', 'w'); 7 8 // 両方のファイルをロック: 書き込み先, 読み込み元 9 array_map(function($fp) { 10 flock($fp, LOCK_EX); 11 }, array($fp_read, $fp_write)); 12 13 // 特定のフォーマットに変換しつつ、出力先にテキストを書き出し 14 $count = 0; 15 while(fgets($fp_read) !== false){ 16 write_to_file($fp_write, $count++); 17 } 18 19 // 両方のファイルロックを開放, ファイルを閉じる: 書き込み先, 読み込み元 20 array_map(function($fp) { 21 flock($fp, LOCK_UN); 22 fclose($fp); 23 }, array($fp_read, $fp_write)); 24} 25 26// FIXME: name, comment の内容が無いためで空値でしか書き込めない。引数や別の方法で取得する 27function write_to_file($fp, $count) { 28 fwrite($fp, $count . '<>' . PHP_EOL); 29 fwrite($fp, filter_input(INPUT_POST, 'name') . '<>' . PHP_EOL); 30 fwrite($fp, filter_input(INPUT_POST, 'comment') . '<>' . PHP_EOL); 31 fwrite($fp, date('Y年m月d日H時i分') . PHP_EOL); 32} 33 34my_main(); // メイン処理呼び出し

out.txt :

txt

10<> 2<> 3<> 42017年11月26日00時07分 51<> 6<> 7<> 82017年11月26日00時07分 92<> 10<> 11<> 122017年11月26日00時07分

もちろんベタで書いてもいいですが、こうして処理の塊ごとに関数にまとめてみると、コードの見通しが良くなるように思います

何か参考になれば幸いです

Links

投稿2017/11/25 15:19

gouf

総合スコア2321

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

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

退会済みユーザー

退会済みユーザー

2017/11/26 03:54

早速の回答有り難うございます! 手探りで打っている初心者なので綺麗な例、大変参考になります。 有り難うございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問