• ベストアンサー

PHPファイルでテキストファイルのデータを編集(読み書き)する方法について

ホームページ内の部分的な文章をブラウザ上で編集できるようにしたいのです。 その文章をテキストファイルに保存して、PHPファイルから、文章を編集する方法について教えてください。 以下は、ネット上で調べて、設定ファイルを編集するソースを利用させて頂いたものです。 イメージは、これで問題ないのですが、以下の場合、改行が含まれる文章の場合は動作しないのです。 設定ファイルを編集するように作られているので仕方ないのかなと思いますが、改行を含んだ文章も利用できるようになりますでしょうか? ##edit.php <?php $ini = parse_ini_file('config.ini'); if ($HTTP_POST_VARS['data1']) $ini['data1'] = $HTTP_POST_VARS['data1']; if ($HTTP_POST_VARS['data2']) $ini['data2'] = $HTTP_POST_VARS['data2']; if ($HTTP_POST_VARS['data3']) $ini['data3'] = $HTTP_POST_VARS['data3']; $fp = fopen('config.ini', 'w'); foreach ($ini as $k => $i) fputs($fp, "$k=$i\n"); fclose($fp); ?> <html> <title>テキストファイルのデータ更新</title> </head> <body> <form method="post" action="edit.php"> data1の変更 - <input type="text" name="data1" value="<?php print $ini['data1'] ?>"><br> data2の変更 - <input type="text" name="data2" value="<?php print $ini['data2'] ?>"><br> data3の変更 - <input type="text" name="data3" value="<?php print $ini['data3'] ?>"><br> <input type="submit" value="送信"> </form> </body> </html> ##config.ini の中身 data1=タイトルです。 data2=サブタイトルです。 data3=本文です。 ↑改行した文章も対応したい。。iniファイルをtxtファイルにしないとだめ?

質問者が選んだベストアンサー

  • ベストアンサー
  • moon_night
  • ベストアンサー率32% (598/1831)
回答No.2

単に input を単純に textarea にすると、改行も含めて記録はされるが、parse_ini_file で読み出したときに、改行があると、そこから先は読み込まれないようです。 これを防止するために、改行コードを<br>などに変換してしまい、また読み出すときに改行コードに戻してやれば大丈夫です。 <?php $ini = parse_ini_file('config.ini'); if ($HTTP_POST_VARS['data1']) $ini['data1'] = $HTTP_POST_VARS['data1']; if ($HTTP_POST_VARS['data2']) $ini['data2'] = $HTTP_POST_VARS['data2']; if ($HTTP_POST_VARS['data3']) $ini['data3'] = $HTTP_POST_VARS['data3']; $fp = fopen('config.ini', 'w'); foreach ($ini as $k => $i) { $i = preg_replace("/\r\n|\r|\n/", "<br>", $i); fputs($fp, "$k=$i\n"); } fclose($fp); ?> <html> <title>テキストファイルのデータ更新</title> </head> <body> <form method="post" action="edit.php"> data1の変更 - <textarea name ="data1" rows="5" cols="40"><?php echo preg_replace("/<br>/", "\n", $ini['data1']); ?></textarea><br> data2の変更 - <textarea name ="data2" rows="5" cols="40"><?php echo preg_replace("/<br>/", "\n", $ini['data2']); ?></textarea><br> data3の変更 - <textarea name ="data3" rows="5" cols="40"><?php echo preg_replace("/<br>/", "\n", $ini['data3']); ?></textarea><br> <input type="submit" value="送信"> </form> <table> <tr><td>data1</td><td><?PHP echo preg_replace("/\n/", "<br>\n", $ini['data1']); ?></td></tr> <tr><td>data2</td><td><?PHP echo preg_replace("/\n/", "<br>\n", $ini['data2']); ?></td></tr> <tr><td>data3</td><td><?PHP echo preg_replace("/\n/", "<br>\n", $ini['data3']); ?></td></tr> </table> </body> </html>

wdwdwd
質問者

お礼

有難うございました。 解決できました!

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • sisya
  • ベストアンサー率39% (97/244)
回答No.1

inputタグでは改行が入力できないという意味でしょうか? もしそうなら <input type="text" name="data1" value="<?php print $ini['data1']?>"><br> の部分を <textarea name="data1">="<?php print $ini['data1']?></textarea> とすればよいのではないでしょうか? ini形式ではなく、自由に編集したいというのなら parse_ini_fileを使用せず fileなどを使用してはいかがでしょうか?

wdwdwd
質問者

補足

回答有難うございます。 ><textarea name="data1">="<?php print $ini['data1']?></textarea> すみません。こちらの記載ミスです。入力フォームにtextareaを使用することは、理解しています。 >fileなどを使用してはいかがでしょうか? $ini = parse_ini_file('config.ini'); ↓ $ini = file('config.ini'); に変更するだけで、いいのでしょうか? 試してみましたが、エラーは出ないようになりましたが、テキストファイルを確認すると、過去の文章などが、「番号=○○」という形式で残ってしまって、うまくいかないようです。。 ↓こんな感じで。 ----------------- 0=data1=aaa 1=data2=bbb 2=data3=ccc data1=あああ あああ data2=いいい data3=ううう -----------------

すると、全ての回答が全文表示されます。

関連するQ&A