PHPでLINE風チャットを作成する(既読機能付きソースコード公開)

ゴールデンウィークは台湾出張中で仕事をしなければならないので、土日を使って子供に算数を教える事になった。

そのためにはリモートで子供とコミュニケーションを取る必要がある。

ZOOM、Teams、LINE ……と考えてみたけど、子供が使い慣れているTeamsが良さそうだ。

ただTeamsは互いに社内/校内アカウントで利用しており、(おそらく)常時チャットで連絡をとることができない。

チャットできないと会話する時間を合わせる事もできないので、別途チャットを作成することにした。

結果的にLINEによく似たチャットとなった。

PHPでLINE風チャット実装

まずはググったら同じことをしている人を発見した。

【自作】PHPでチャット機能の作り方!LINEのような会話形式のプログラムのコードを徹底解説!
phpで作れるプログラムの1つにチャット機能があります。いわゆるLINEやDM機能のような1対1の会話や掲示板やSNSのような多人数での会話や投稿機能も作成可能です。今回私が自作したチャット機能の作り方と仕組み、コードを1から解説していきたいと思います!

内容を公開してくれているのは嬉しいが、ソースコードが断片的になっている。

全部Github上に載せたら良いのにな。

 

そのまま使おうかと思ったが

次のような実装を追加した。

  • 全体的にグレー色なのでLINE風に変更
  • チャットのユーザ切り替えがボタンだったのでURLによる切り分けに変更
  • 「既読」機能の追加
  • スマホ向けレスポンシブルデザイン
  • 画像表示機能(添付はできない)

 

え?私のLINEなの?
でも、左右で吹き出しの色って違うんだよ。

 

なるほど、対応。

 

「既読」が無いよ?

 

マジカヨ。

 

 

「既読」機能って難しいんだよ。

ChatworkやSlackも付けてない。これ実装都合もあると思う。

 

仕方ないので

  • 最終アクセス/最終画面更新時間を保存
  • それより古い相手の投稿に「既読」をマークする

という対応にした。

毎回「既読」チェックが走るし、PHP側で処理しているのでサーバ負荷もかかる。

投稿数が増えてくると処理が追いつかない気がする……。

 

でも完成。

「https://アドレス/?man=1」と「https://アドレス/」にアクセスすると互いにコミュニケーションが取れるようになっている。

 

スタンプ機能は?
画像送れないの?
連絡来たら通知機能は無いの?

 

……そこまで無理。

画像だけならAjaxとPHPで転送できるが、LINEのように画像と文字を一緒にAjaxで送る方法は見つからなかった。

所定のフォルダに画像を別途SFTPで送ることで、表示することは可能にしておいたけど……。

 

連絡通知も「Push.js」を使えばポップは出ることは確認したけど、そもそも相手がブラウザを閉じてたら、ブラウザ上でしか動作しないので何もできない。

おわりに

相方から

「子供がお父さんからの連絡をずっと待ってパソコンを何度も開きに行く」

との連絡があった。

……やっぱそうなるよね。

ソースコード

基本的には前述したサイトのソースコードを丸写し。

だったけど、chatlog.phpとindex.phpのコードに重複箇所が多いのでまとめた。

GitHubはここ。

GitHub - nehori/php-chat-like-line
Contribute to nehori/php-chat-like-line development by creating an account on GitHub.

【index.php】

タイトルとURLをコピーしました