Posted by : Izumikawa Fukumi 2013年1月4日金曜日

皆さんあけましておめでとうございます。

今年もよろしくお願いします。
もうすっかり寒くなりストーブが無いとパソコンいじれない時期になりましたね
でも僕夏より冬が好きな感じの人間なので寒くてもパソコン出来ると言う技がww

って事で今回phpのお話になるのですが、
2013年1月1日にクロネコヤマトさんが頑張って僕の家へphp逆引き本を運んで来てくれました。
それからほぼ毎日逆引き本を見て色々試していました。
ある程度phpの知識が付いてからチャットを作ろうと思い今回作ったのですが・・・・・

結構難しかったです^^;

最初は、ログファイルに書き込めて表示出来ればチャットになるだろうと思いやってたのですが、
後々色々問題が起こりました。

トラブルを一覧にまとめてみました。

  1. 追記が出来ない
  2. 繰り返し処理で、ログファイルを表示しているのに全て表示されてしまう。
最初は、これだけのトラブルが起こりました。
でもこの問題は、上級者さんからしたら結構単純なのかもしれません。
僕は、基本的に初心者さんへのちょっとした通知として書きたいと思います。

まず1追記が出来ない問題なのですが、

fopen関数で、ファイルを開くと書き込みモードでは、
  1. w 書き込み:ファイルサイズをゼロにして開く(ポインタ 先頭)
  2. w+ 書き込み/読み込み ファイルサイズゼロで開く (ポインタ 先頭)
  3. a 書き込み 通常に開く (ポインタ 終端)
  4. a+書き込み/読み込み 通常に開く (ポインタ 終端)
  5. x  書き込み ファイルが存在する場合エラー (ポインタ 先頭)
あと1つx+と言うのがあるのですが、これもxと変わるのは、読み込みが出来るだけです。


モードを見る限りファイルポインタが先頭でファイルサイズをゼロにしずに開けるのは、ありません
これだと追記が出来ないのです。

ファイルポインタが終端だと下の方に新しいログが表示されて、
チャットとしては、無理があります。
ただ追記は、考えたら出来ます。

他にもファイルを開く方法があるのです。

file_get_contents() この関数を使うと新たにファイルを読み込む事が出来ます。
これをfopenと合わせたら追記が可能です。

$logtxts = file_get_contents("log.html");
$txt = $_POST{"containertxt"};
$log = fopen("log.html", "w");
fputs($log, $txt . $logtxts); 
fwrite($log);

まずlog.htmlをfileとfopenで、開きます。
fileは、読み込むだけの物だと思って下さい。

書き込む際にまず送られて来た情報を$txtの変数へ入れてfputsの中に書き込みます。
次に、fileで、読み込んだ情報を$logtxtsの変数へ入れてfputsの最後に書き込みます。

これを物理的に考えると大体分かると思います。


これで、先頭への追記は、完了です。



繰り返し処理で、ログファイルを表示しているのに全て表示されてしまう


これは、当たり前の事かもしれません。
もともと繰り返し処理は、処理を繰り返すだけですもんw

この場合forで、繰り返す回数を決めるといいかもしれませんね

<?php
 $log = fopen("log.html", "r");
 for ( $a=0; $a < 20; $a++ ) {
 $fo = fgets($log);
 print $fo;
 print "<hr>";
 }
?>

$aの値の最初は、0にします。$a < 20; にすると20回繰り返します。$a++で、値が増えていきます。

これで、ログは、20行まで表示出来ます。


これだけでも十分チャットらしくなりましたが、
他にも色々機能を付ける必要がありますが省略させていただきます。

何個か必要な機能をまとめてみます。
  1. ニックネーム機能 (セッションを使います。)
  2. 文字の色機能 (セッションを使います。)
  3. ロード秒数設定機能 (セッションを使います。)
これらの機能は、だいたい個人的な設定な為セッションを使うといいかもしれません。

- Copyright © I aim to creator. - Hatsune Miku - Powered by Blogger - Designed by Johanes Djogan -