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

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

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

WebSocketとは双方向・全二重コミュニケーションのためのAPIでありプロトコルのことを指します。WebSocketはHTML5に密接に結びついており、多くのウェブブラウザの最新版に導入されています。

PHP

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

Q&A

解決済

1回答

1043閲覧

【PHP】データの出力方法

ryouya

総合スコア14

WebSocket

WebSocketとは双方向・全二重コミュニケーションのためのAPIでありプロトコルのことを指します。WebSocketはHTML5に密接に結びついており、多くのウェブブラウザの最新版に導入されています。

PHP

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

0グッド

0クリップ

投稿2021/11/03 02:39

お世話になっております。
下記知見のある方がいらっしゃいましたら、ご教示お願いいたします。

#起きている問題
PHPでWebSocketを利用したリアルタイムチャット
上記サイトを参考にwebsocketを利用して、リアルタイムチャット機能を作成しているのですが、
相手側に画像情報を表示することができません。(テキストは表示可能)
イメージ説明

#確認したこと
自分のメッセージ上は、画像情報を$('~').attr('src')で取得しています。
相手側の画像情報を取得するためには、どのようにすればよろしいでしょうか。

送信したメッセージに関しては、DB内で保存しています。(※画像情報も含まれる)

#ソースコード

<?php require_once('config_1.php'); ?> <!DOCTYPE html> <html lang="ja"> <meta charset="utf-8"> <title>Chat</title> <script src="http://code.jquery.com/jquery-2.2.4.js"></script> <script> (function($) { var destination_user_image = $('.destination_user_image').val(); var settings = {}; var methods = { init: function(options) { settings = $.extend({ 'uri': 'ws://localhost:8080', 'conn': null, 'message': '#message', 'display': '#display' }, options); $(settings['message']).keypress(methods['checkEvent']); $(this).chat('connect'); }, checkEvent: function(event) { if (event && event.which == 13) { var message = $(settings['message']).val(); if (message && settings['conn']) { settings['conn'].send(message + ''); $(this).chat('drawText', message, 'right'); } } }, connect: function() { if (settings['conn'] == null) { settings['conn'] = new WebSocket(settings['uri']); settings['conn'].onopen = methods['onOpen']; settings['conn'].onmessage = methods['onMessage']; settings['conn'].onclose = methods['onClose']; settings['conn'].onerror = methods['onError']; } }, onMessage: function(event) { if (event && event.data) { $(this).chat('drawText', event.data, 'left'); } }, onError: function(event) { $(this).chat('drawText', 'エラー発生!', 'left'); }, drawText: function(message, align = 'left') { var box = $('<p class="box"></p>').text(message); var message_box = $('<p class="box"></p>'); var destination_user_image = $('.destination_user_image').val(); var message_image = $('.my_preview').attr('src'); var newelm = document.createElement('img'); newelm.setAttribute('src', message_image); if (align === 'left') { var inner = $('<div class="left"></div>').html(box); if (message_image != null) { box[0].appendChild(newelm); } inner.prepend( "<img src='../user/image/" + destination_user_image + "' class='message_user_img'>"); } else { var inner = $('<div class="mycomment right"></div>').html(box); if (message_image != null) { box[0].appendChild(newelm); } inner.append( "<img src='../user/image/<?= $current_user['image'] ?>' class='message_user_img'>"); } $('#chat').append(inner); $('.my_preview').attr('src', null); }, }; $.fn.chat = function(method) { if (methods[method]) { return methods[method].apply(this, Array.prototype.slice.call(arguments, 1)); } else if (typeof method === 'object' || !method) { return methods.init.apply(this, arguments); } else { $.error('Method ' + method + ' does not exist'); } } $(document).keypress(function(e) { e.stopPropagation(); if (e.which == 13) { var message = document.getElementById("message").value, destination_user_id = document.getElementById("destination_user_id").value; var formdata = new FormData(); var formdata = new FormData(document.getElementById('image')); formdata.append('message', message); formdata.append('destination_user_id', destination_user_id); $.ajax({ type: 'POST', url: 'message/ajax_post_message.php', dataType: 'html', data: formdata, cache: false, processData: false, contentType: false }).done(function(data) { document.getElementById("message").value = ''; $('.far.fa-times-circle.my_clear').hide(); $('.my_preview').hide(); $('#my_image').val(''); }).fail(function(data) {}); } }); })(jQuery); $(function() { $(this).chat({ 'uri': 'ws://localhost:8080', 'message': '#message', 'display': '#chat' }); }); </script> </head> <body> <?php $user = new User($_SESSION['user_id']); $current_user = $user->get_user(); $user = new User($_GET['user_id']); $destination_user = $user->get_user(); $message = new Message(); $messages = $message->get_messages($current_user['id'], $destination_user['id']); $bottom_message = $message->get_new_message($current_user['id'], $destination_user['id']); $message->reset_message_count($current_user['id'], $destination_user['id']); ?> <div class="row"> <div class="col-8 offset-2"> <h2 class="center"><?= $destination_user['name'] ?></h2> <div class="message"> <?php foreach ($messages as $message) : ?> <div class="my_message"> <?php if ($message['user_id'] == $current_user['id']) : ?> <div class="mycomment right"> <span class="message_created_at"> <?= convert_to_fuzzy_time($message['created_at']) ?> </span> <p><?= $message['text'] ?> <?php if (!empty($message['image'])) : ?> <img src="../message/image/<?= $message['image'] ?>"> <?php endif; ?> </p><img src="../user/image/<?= $current_user['image'] ?>" class="message_user_img"> </div> <?php else : ?> <div class="left"><img src="../user/image/<?= $destination_user['image'] ?>" class="message_user_img"> <div class="says"><?= $message['text'] ?> <?php if (!empty($message['image'])) : ?> <img src="../message/image/<?= $message['image'] ?>"> <?php endif; ?> </div><span class="message_created_at"><?= convert_to_fuzzy_time($message['created_at']) ?></span> <?php endif; ?> </div> <?php endforeach ?> </div> <div id="chat" class="container"> </div> <input type="text" id="message" size="50" /> <div class="message_image"> <label> <form id="image"> <i class="far fa-image"></i> <input type="file" name="image" id="my_image" accept="image/*" multiple> </form> </label> </div> <div class="message_image_detail"> <div><img class="my_preview"></div> <i class="far fa-times-circle my_clear"></i> </div> <input type="hidden" name="destination_user" class="destination_user_image" value="<?= $destination_user["image"] ?>"> <input type="hidden" name="destination_user_id" id="destination_user_id" value="<?= $destination_user['id'] ?>"> </div> </div> </body> <?php if (isset($_SESSION['login']) == true) { require('profile.php'); } ?> <script src="/js/user_page.js"></script> </html>

#Github

https://github.com/karirin/chat_app

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

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

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

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

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

guest

回答1

0

ベストアンサー

一番単純にやるなら送信側で画像データをBase64エンコードして文字列にし、テキストと同様に相手にそのまま送りつけて、受け手側でBase64デコードして表示する方法になると思います。

参考)
https://qiita.com/yasumodev/items/e1708f01ff87692185cd
https://gray-code.com/javascript/display-image-in-base64-format/

DBを使って画像データも保存しているなら別の方法もあると思いますが、それはそれで色々と面倒でしょうね。

投稿2021/11/03 10:27

AbeTakashi

総合スコア4497

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

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

ryouya

2021/11/07 04:22

ご回答いただきありがとうございます。 確認いたします。
ryouya

2021/11/28 04:24

こちら返答遅くなってしまい、すみません。 画像データをBase64エンコード、デコードしたところ上手くいきました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問