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

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

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

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

XAMPP

XAMPP(ザンプ)は、ウェブアプリケーションの実行に必要なフリーソフトウェアをパッケージングしたApacheディストリビューションです。 XAMPPひとつインストールするだけで、Apache、MySQL、PHP、Perlなどのソフトウェアと、 phpMyAdminなどの管理ツール、SQLiteなどのソフトウェアやライブラリモジュールなどを利用することが可能です。

Q&A

解決済

1回答

3853閲覧

オープンソースのプログラムを実行したい

mlore

総合スコア1

PHP

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

XAMPP

XAMPP(ザンプ)は、ウェブアプリケーションの実行に必要なフリーソフトウェアをパッケージングしたApacheディストリビューションです。 XAMPPひとつインストールするだけで、Apache、MySQL、PHP、Perlなどのソフトウェアと、 phpMyAdminなどの管理ツール、SQLiteなどのソフトウェアやライブラリモジュールなどを利用することが可能です。

0グッド

0クリップ

投稿2021/10/19 00:03

前提・実現したいこと

http://wiz-code.digick.jp/ajax/demo.online-chat.html
こちらのチャットシステムのソースコードを使い、実行したいのですが、やり方がわかりません。
どういう順序でやれば実行できるのか指南いただきたいです。

該当のソースコード

PHP

1<?php 2 3date_default_timezone_set('UTC'); 4/* スクリプトの実行時間 */ 5set_time_limit(60); 6/* セッション・クッキーはブラウザ終了で破棄。HTTPSであれば第4引数はtrueを指定する */ 7session_set_cookie_params(0, '/', '', false, true); 8/* キャッシュを無効化とブラウザバック対応 */ 9session_cache_expire(0); 10session_cache_limiter('private_no_expire'); 11 12require_once('Cache/Lite.php'); 13require_once('functions.php'); 14 15define('APP_NAME', 'online_chat'); 16 17header('Content-type: text/html; charset=utf-8'); 18 19session_start(); 20 21/* ページの初回訪問者への処理 */ 22if (!isset($_SESSION['client_id'])) { 23 $_SESSION['client_id'] = random_str(); 24} 25 26/* ノンスを作成 */ 27$nonce = session_id(); 28 29/* Cache_Liteの初期化時に指定するオプション。チャットデータの保存期間は24時間とする */ 30$options = get_cache_lite_options(array('lifeTime' => 86400)); 31 32try { 33 34 $cache = new Cache_Lite($options); 35 $chat_data = $cache->get('chat_data', APP_NAME); 36 37 /* チャットデータが存在しなければ新規作成してファイルに保存する */ 38 if ($chat_data === false || !is_array($chat_data)) { 39 $chat_data = array(); 40 $cache->save($chat_data, 'chat_data', APP_NAME); 41 } 42 43 /* 読み込みエラー時に備えて直前のデータをキャッシュする */ 44 $_SESSION['chat_data_cache'] = $chat_data; 45 /* クライアントに最後に送ったチャットデータのIDを格納 */ 46 $_SESSION['last_chat_id'] = null; 47 48 session_write_close(); 49 50} catch (Exception $e) { 51 format_error_log($e->getMessage, __FILE__, __LINE__); 52} 53 54?> 55 56<!DOCTYPE html> 57<html lang="ja"> 58 <head> 59 <meta charset="utf-8"> 60 <meta http-equiv="X-UA-Compatible" content="IE=edge"> 61 <meta name="viewport" content="width=device-width, initial-scale=1"> 62 <title>チャットルームのテストページ - Server-Sent EventsとAjax・PHPのリアルタイム・チャットシステム | ウィザード・コード - WIZARD-CODE</title> 63 <link href="/lib/bootstrap/3.3.1/css/bootstrap.min.css" rel="stylesheet"> 64 </head> 65 <body> 66 <div class="container"> 67 <h1 class="h2">チャットルームのテストページ</h1> 68 <p><strong>Server-Sent Events</strong>/<strong>Ajax</strong>/<strong>PHP</strong>を組み合わせたリアルタイム・チャットシステムです。SSEが実装されていない<strong>Internet Explorer</strong>では利用できません。リアルタイムとありますが、ユーザー間で同期していないので実際には擬似リアルタイムです。</p> 69 <p>セキュリティについて、Ajax通信はトークンで<strong>CSRF</strong>対策を行います。入力文字のバリデーションはクライアント側で行い、制御文字や特殊文字は入力不可として送信しません。サーバー側の対策は出力時のエスケープ処理のみです。</p> 70 <p>Google ChromeのデベロッパーツールやFirebugなどでストリーミングの中身が確認できます。「ネットワーク」のタブを開くとchat-data-stream.phpがコネクションを張り続けているのがわかると思います。書き込まれた内容はキャッシュファイルに24時間保存され、その後に自動的に削除されます。</p> 71 <p>ソースコードを<a href="http://wiz-code.digick.jp/dev/html5/stream/online-chat/online-chat.html">こちらのページ</a>で公開しています。ライセンスフリーです。</p> 72 <form id="chat-form"> 73 <div id="name-group" class="form-group"> 74 <label for="chat-name" class="control-label">名前を入れてください</label> 75 <input type="text" class="form-control" id="chat-name" name="chat-name" placeholder="3文字以上20文字まで入力できます(空欄でもOK)。"> 76 </div> 77 <div id="message-group" class="form-group"> 78 <label for="chat-message" class="control-label">メッセージをどうぞ</label> 79 <input type="text" class="form-control" id="chat-message" name ="chat-message" placeholder="最大60文字まで入力できます。" autocomplete="off"> 80 </div> 81 <input type="hidden" id="nonce" name="nonce" value="<?=h($nonce)?>"> 82 <button id="submit-button" type="submit" class="btn btn-info">チャットを送信</button> 83 </form> 84 <table class="table"> 85 <thead> 86 <tr> 87 <th class="col-xs-2 col-sm-2 col-md-2 col-lg-2">名前</th> 88 <th class="col-xs-8 col-sm-8 col-md-8 col-lg-8">メッセージ</th> 89 <th class="col-xs-2 col-sm-2 col-md-2 col-lg-2 text-center">送信時間</th> 90 </tr> 91 </thead> 92 <tbody id="chat-list"></tbody> 93 </table> 94 </div> 95 <script src="/lib/jquery/jquery-2.2.2.js"></script> 96 <script src="/lib/bootstrap/3.3.1/js/bootstrap.min.js"></script> 97 <script src="/lib/underscore/1.8.3/underscore.js"></script> 98 <script src="/js/online-chat.js"></script> 99 </body> 100</html>

PHP

1date_default_timezone_set('UTC'); 2set_time_limit(60); 3session_set_cookie_params(0, '/', '', false, true); 4 5require_once('Cache/Lite.php'); 6require_once('functions.php'); 7 8define('APP_NAME', 'online_chat'); 9define('MAX_CHAT_LIMIT', 100); 10 11/* レスポンスはテキストデータとして返す */ 12header('Content-Type: text/plain; charset=utf-8'); 13header('X-Content-Type-Options: nosniff'); 14 15session_start(); 16 17/* クライアントに渡す変数(真偽値) */ 18$response = false; 19 20/* Ajax通信でなければ終了 */ 21if (@$_SERVER['HTTP_X_REQUESTED_WITH'] !== 'XMLHttpRequest') { 22 $message = 'invalid access'; 23 format_error_log($message, __FILE__, __LINE__); 24 echo $response; 25 exit; 26} 27 28/* アクセスが room.php 経由でない場合終了 */ 29if (!isset($_SESSION['client_id'])) { 30 $message = 'client id not found'; 31 format_error_log($message, __FILE__, __LINE__); 32 echo $response; 33 exit; 34} 35 36/* POSTデータを読み込む */ 37$raw_post_data = @file_get_contents('php://input'); 38parse_str($raw_post_data, $params); 39 40$chat_name = $params['chat-name']; 41$chat_message = $params['chat-message']; 42$nonce = $params['nonce']; 43 44/* ノンスが異なっていたら終了 */ 45if (session_id() !== $nonce) { 46 $message = 'invalid nonce'; 47 format_error_log($message, __FILE__, __LINE__); 48 echo $response; 49 exit; 50} 51 52/* チャットデータの保存期間は24時間とする */ 53$options = get_cache_lite_options(array('lifeTime' => 86400)); 54 55try { 56 /* Cache_Liteライブラリを初期化 */ 57 $cache = new Cache_Lite($options); 58 59 /* チャットデータを読み込む */ 60 $chat_data = $cache->get('chat_data', APP_NAME); 61 if ($chat_data === false || !is_array($chat_data)) { 62 /* データが壊れている可能性があるので直前のデータで上書き */ 63 $cache->save($_SESSION['chat_data_cache'], 'chat_data', APP_NAME); 64 65 $message = 'chat data not found'; 66 format_error_log($message, __FILE__, __LINE__); 67 echo $response; 68 exit; 69 } 70 71 /* ランダムな文字列を生成してチャットIDにする */ 72 $chat_id = random_str(); 73 74 $new_chat = array( 75 'id' => $chat_id, 76 'name' => $chat_name, 77 'message' => $chat_message, 78 'create_time' => floor(microtime(true) * 1000), 79 ); 80 81 array_unshift($chat_data, $new_chat); 82 /* データ数が最大数を超えたら古い順に削除 */ 83 $chat_data = array_slice($chat_data, 0, MAX_CHAT_LIMIT); 84 85 /* セッション変数に直前のチャットデータを格納 */ 86 $_SESSION['chat_data_cache'] = $chat_data; 87 88 /* チャットデータを保存 */ 89 $result = $cache->save($chat_data, 'chat_data', APP_NAME); 90 if ($result === false || is_object($result)) { 91 $message = 'failed to save'; 92 format_error_log($message, __FILE__, __LINE__); 93 echo $response; 94 exit; 95 } 96 97 $response = true; 98 echo $response; 99 100} catch (Exception $e) { 101 format_error_log($e->getMessage, __FILE__, __LINE__); 102 echo $response; 103}

まだありますが、省きます。

試したこと

XAMPPを使い、サーバーを立てて、room.phpを呼び出すことはできたのですが、
Warning: require_once(Cache/Lite.php): failed to open stream: No such file or directory in C:\xampp\htdocs\php_chat\room.php on line 12

Fatal error: require_once(): Failed opening required 'Cache/Lite.php' (include_path='C:\xampp\php\PEAR') in C:\xampp\htdocs\php_chat\room.php on line 12

とエラーが出て、そこからどうすればいいのかわかりません。
テーブル設計が必要なのかと考えたのですが、ソースコードをみてテーブル設計はできるものなのでしょうか?
そもそもこのオープンソースから自分のほうで実行することは可能なんでしょうか?

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

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

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

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

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

1T2R3M4

2021/10/19 00:52

エラーメッセージを理解して対応されたのでしょうか。
guest

回答1

0

ベストアンサー

回答

PEAR Cache_Liteをインストールする必要があるので
PEAR Cache_Lite インストールあたりで調べてみて下さい。
多分、zipでダウンロードして手動で読み込ませる方法が参考にして、Cacheディレクトリをroom.phpと同じ階層に置けばこのエラーは解決するんじゃないかなと思います。

捕捉

ただ、ソースコードがあまりにも古く動作保証されている環境も古すぎるため、上記のエラーを解消したとしても正常に動作しなかったり新たなエラーが発生する可能性も高いです。

そのあたりを解決するのは非常に大変なので、余程深刻な理由がない限りは別のアプリケーションを探されることをお勧めします。

投稿2021/10/19 01:37

tanat

総合スコア18713

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問