データの記録方法について

このQ&Aのポイント
  • オンラインゲームのような複雑で多量なデータを効率的に整理する方法は何ですか?MySQLやSQLiteを使用せずに純粋な記録ファイルに保存する場合について考えています。
  • 画像リストの作成や追加/編集/削除/並び替えの方法について、phpを使用してどのように効率的に処理できるか悩んでいます。
  • 自分のゲーム開発での経験から、記録ファイルにデータを保存する際に不便さを感じることがあり、より使いやすい方法を知りたいです。
回答を見る
  • ベストアンサー

データの記録方法

私はperlとphpなどを使用してブラウザゲームを作成しているのですが、 オンラインゲームのように複雑で多量なデータを記録する方法として どのように保存したほうがもっとも効率よく整理できるのでしょうか? [画像の追加/削除/順番入れ替え]もする場合 ※MySQLやSQLiteなどは使わず純粋に記録ファイルに記録する場合です たとえば画像リストを作成する場合に 1.gif~150.gifのリストを作成するのにphpの場合 <? $PlayerImageList = array( '1.gif', '2.gif', '3.gif', ~~~~省略~~~~ '149.gif', '150.gif' ); ?> と記録して読み込みしたファイルが$PlayerImaheListの中身を書き換えるのか 1.gif 2.gif ~省略~ 149.gif 150.gif と記入してfile()関数を使用しするのかという2通りのアイディアが あるのですが、自分で使っていて今ひとつ不便に感じるのですが、 どのようにした場合簡単に[追加/編集/削除/並び替え]ができるのでしょうか?

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

  • ベストアンサー
  • calltella
  • ベストアンサー率49% (317/635)
回答No.1

データーベースを使用しないのでしたら FILE関数で外部ファイルを使用する2番目の案がいいと思いますよ。

関連するQ&A

  • 【php MySQL】データが取り出せない

    こんにちは。 MySQLのデータをphpで管理するページを作っていますが、壁にぶつかってしまいました。 データベースのあるフィールドに、「あああ」「いいい」「ううう」というようにいろんな言葉が登録されています。 これらを削除・追加するために、phpで取り出して、チェックボックスでリストアップします。 リストにない言葉は新たに登録できるように、テキストフィールドも用意しています。 □あああ □いいい □ううう 新規:[   ](テキストフィールド) というふうにです。 このフォームはちゃんと機能していまして、追加した言葉はデータベースに記録されているのですが、なぜかフォームにリストアップされないのです。 例えば、    □あああ □いいい □ううう 新規:[   ] で、新規のところに「かかか」と入れて送信すると、    □あああ □いいい □ううう □かかか 新規:[   ] となってほしいわけですけど、    □あああ □いいい □ううう □ 新規:[   ] となってしまうのです。 フォームを使って送信した言葉が、データベースに記録されていながら、取り出せないというのは、何が原因だと考えられるでしょうか? 何かすごく単純なことのような気がするので、ソースは載せないでおきます。 ご教示をよろしくお願いいたします。

    • ベストアンサー
    • PHP
  • テーブルデータ表示後、再表示の方法

    初めて質問させて頂きます。うまく言葉に出来てないかもしれませんがよろしくお願い致します。 現在スケジュール管理をPHPとSqliteで作成しています。 yotei.phpでDBのデータを表示(HTMLのTABLE)し、予定の追加・更新をする場合は該当の日付をクリックするとrequire_onceでtoroku.phpを読込ます。toroku.phpでは更新処理か新規登録かを確認し、<form action="add.php?id='.$id.'&ymd='.$ymd.'" method="POST">にて登録・削除・リセットの各ボタンにあわせてのDB処理を行っています。 <?php session_start(); $link = sqlite_open('yotei.db', 0666, $sqliteerror); ?> ~一部省略~ <TABLE BORDER=1 WIDTH="100%" CELLPADDING="2" CELLSPACING="0"> <TBODY><TR> <TD>日付</TD> <TD>曜日</TD> <TD>予定時間</TD> <TD>作業内容</TD></TR> <?php //データ表示 $ymd = date('Ymd', mktime(0, 0, 0, $mm, $dd, $yy)); $i = 0; while ($ymd <= $to_date) { $sql = "SELECT * FROM timetbl where (id=$sid and ymd=$ymd)"; $result = sqlite_query($link, $sql, SQLITE_BOTH); if ($rows = sqlite_fetch_array($result)) { print('<TR>'); print('<TD WIDTH="5%" ALIGN="center" NOWRAP><A href="yotei.php?ymd='.date('Ymd', mktime(0, 0, 0, $mm, $dd, $yy)).'">'.date('m/d', mktime(0, 0, 0, $mm, $dd, $yy)).'</A></TD>'); print('<TD WIDTH="5%" ALIGN="center" NOWRAP bgcolor="'.$chk['color'].'">'.$chk['youbi_m'].'</TD>'); ~一部省略~ } else { print('<TR>');    print('<TD WIDTH="5%" ALIGN="center" NOWRAP><A href="yotei.php?ymd='.date('Ymd', mktime(0, 0, 0, $mm, $dd, $yy)).'">'.date('m/d', mktime(0, 0, 0, $mm, $dd, $yy)).'</A></TD>'); print('<TD WIDTH="5%" ALIGN="center" NOWRAP bgcolor="'.$chk['color'].'">'.$chk['youbi_m'].'</TD>'); ~一部省略~ print('</TR>'); } $dd = $dd + 1; $ymd = date('Ymd', mktime(0, 0, 0, $mm, $dd, $yy)); $i = $i + 1; if ($i > 30) { break; } } ('<TD WIDTH="5%" ALIGN="center"> </TD>'); ~一部省略~ ?> </TBODY></TABLE></DIV> <?php sqlite_close($link); if (!isset($_GET['ymd'])){   PRINT('</BODY>'); PRINT('</HTML>'); exit; } ?> <?php require_once("toroku.php"); ?> </tbody></table></div> toroku.phpでは、該当の日付のDBのデータを読み退避させてyotei.phpと同じ様に1か月分を再表示させてますが、yotei.phpの表示とtoroku.php再表示の表が重なって表示されてしまいます。 申し訳ありませんが、ご教示頂けませんでしょうか?

    • ベストアンサー
    • PHP
  • ゲームソフトにおけるセーブデータ

    ウィンドウズ98を使用しています。 個人が作られたゲームソフトをパソコンに落として、よく遊んでいます。 さて、ゲームの途中経過をセーブ出来る作品が、よくありますよね。 その際、セーブデータは、パソコン内の、どこかに、 「~.sav」という拡張子を持つファイルとして保存されるそうですね。 それらを、ウィンドウズの検索で、全部一括して出すことは 出来ないでしょうか? 例えば、検索で、「ファイルの種類」で「GIFイメージ」を選ぶと、 パソコン内にある全てのGIF画像ファイルが出てきますよね。 それと同じように、パソコン内にある、全てのセーブファイル (あらゆるゲームの)を、表示することは不可能でしょうか? 訳ありで、どうしても、セーブデータを削除したいのです。 ゲームのタイトルが分かっている場合は、 その名前で検索すればよい場合もありますが、 ゲームを既にアンインストールしていて、 ゲームのタイトルすら分からない場合は、 検索で、パソコン内にある、あらゆるセーブデータを 一括して出すしかないと思います。 よかったら教えてください!

  • 単純ですが、意外と穴?なデータベースリソースの鮮度

    よろしくお願い致します。 環境PHP5.2.5 / SQLite3 /*---------------------------------------- * インサート -----------------------------------------*/ $sql_1 = 'INSERTなんたら~(id = 25 を作成)'; $db_pass = 'db_hoge.sqlite'; $db_res = sqlite_open($db_pass); //★タイム(1) $result = sqlite_query($db_res,$sql_1);      :   ~ INSERT処理($sql_1)をしてます ~      : //sqlite_close($db_res) ここではクローズせず      :      : /*---------------------------------------- * デリート -----------------------------------------*/ $sql_2 = 'DELETEなんたら~(id = 25 を削除)'; //省略しちゃうわけです。$db_pass = 'db_hoge.sqlite'; //省略しちゃうわけです。$db_res = sqlite_open($db_pass); //★タイム(2) $result = sqlite_query($db_res,$sql_2);      :   ~ DELETE処理($sql_2)をしてます ~      : /*---------------------------------------- * /処理完了 -----------------------------------------*/ //ここで、ようやく、クローズ sqlite_close($db_res); //============================================== 何が疑問かと言いますと、 ★タイム(1)と、★タイム(2)の時点では、 $db_res の中身の鮮度が違うのでは?と思うわけです。 つまり、 ★タイム(1)の時点では、id=25のデータは作成されていません。 ★タイム(2)の時点では、id=25のデータは作成済みです。 id=25が作成されていない状態のDBリソースを、 ★タイム(2)の所で、使用しています。 言い換えると、 id=25が存在していないDBのリソースを、 タイム(2)の時点で使用し、 そのリソースをもとに、 id=25のデータを消そう(DELETEしよう)としているわけです。 「//省略しちゃうわけです。」 という所で、省略する場合と、しない場合とでは、 結果はやはり異なるのでしょうか? 検査対象がリソースだけに、調べにくいなと思い、 質問させて頂きました。 どなたか、この辺りの正式な作法も含めて、 教えて頂けてませんでしょうか。 上記の「//省略しちゃうんです。」の方法で、 問題ないですよ、 ということであれば、今後も、省略しちゃう方向で、 コーディングしていこうと思います。笑

    • ベストアンサー
    • PHP
  • SQLite3にPHPでデータの更新・追加する方法

    PHP初心者です。 すみません、どなたか教えてください。 SQLite3 のデータベース内にあるテーブルに、同一データがすでにある場合はそのデータを更新、無い場合はデータを追加したいのですが、PHPではどのように書けばよいのでしょうか? 具体的には、hoge.dbの中のテーブル prime_ministers があり、 id 1, name 伊藤博文, origin 長州 id 2, name 黒田清隆, origin 薩摩 上記の2データはすでに保存されているものとします。 そこにデータを追加するのですが、 name 伊藤博文, origin 長州 の場合は、もうすでにテーブル内に伊藤博文のデータがあるので、上書き更新、 name 大隈重信, origin 肥前 の場合は、nameのカラムに大隈重信が無いので、データを追加。 データベースがSQLite3の場合、どのように書けば良いのでしょうか? どうぞよろしくお願いします。

    • ベストアンサー
    • PHP
  • ログの記録方法について

    現在、以下のように記録する最大数を超えた場合、 古いデータは1行削除、新規データは追加するようにしてるのですが これを最大数を超えた場合にはfile.txtのすべてデータを 別に自動生成した過去ログファイルに記録し、 また過去ログファイルは最大5ファイルまで作成したいのです。 もしやり方が分かるようでしたらお手数ですがお教えいただけませんか? $maxlog = $logmax; #ログファイルの場所 $comment =~ s/\n//g; ($sec,$min,$hour,$day,$mon,$year,$wday,$dmy,$dmy) = localtime(time); $year = 1900 + $year; $mon++; if ($mon < 10) { $mon = "0$mon"; } if ($day < 10) { $day = "0$day"; } if ($hour < 10) { $hour = "0$hour"; } if ($min < 10) { $min = "0$min"; } $date = "$year\/$mon\/$day $hour\:$min"; # ログファイル読込 open LOG,$file; @log = <LOG>; close LOG; # 先頭に新規ログデータを追加 unshift (@log,"$date<>$mailto<>$comment<>$agent<>$host<>$toki<>\n"); # 保存行数を超える分末尾を削除 while(@log > $maxlog){ pop @log; } # 更新されたデータでログファイルに上書き open LOG,">$file"; print LOG @log; close LOG;

    • ベストアンサー
    • Perl
  • ソフトの使用記録を消去する方法

    家族と同じPCを使っています ブラウザの履歴等削除はオートコンプリートを使うのはわかったのですが ワードなんかで最近開いたファイル の記録が残っていますよね これは他のソフトでもそうなんでしょうか? たとえば画像ソフトとか音楽ソフトとか使用したり 打ち込んだ文字の記録は残っていますか? 使用したソフトの記録を消去するにはどうすればいいのでしょうか?

  • (PHP 4.4.8) sqlite_open関数の引数を相対パスにしたいのですが上手くいきません。

    PHP 4.4.8 SQLite Library 2.8.14 の環境で、 sqlite_open関数の引数を相対パスにしたいのですが上手くいきません。 (例)create_db.php <?php $db = sqlite_open("../db_test"); //←ここでエラーが出ます。 $query = "CREATE TABLE tbl_test(id,aaa,bbb)"; $result = sqlite_query($db,$query); sqlite_close($db); ?> ネットで調べた所、sqlite_open()は引数に「相対パス(or絶対パス)」を入れることは可能であり、 かつ、「../db_test」が無い場合、作られる仕組みということです。 エラー表示: Warning: sqlite_open() [function.sqlite-open]: unable to open database (...以下略) ちなみに、上記のコードにおいて、 「../db_test」ではなく、「db_test」として同じことをすると、上手くいきます。 つまり、スクリプトファイル(create_db.php)と同階層にファイルを作成することはできるのです。 $db = sqlite_open("db_test");   //← ○:ファイル作成成功 $db = sqlite_open("../db_test"); //← ×:ファイル作成失敗 どなたかご助言をよろしくお願い致します。

    • ベストアンサー
    • PHP
  • セレクトボックスのデータをリストボックスへ書き出す

    javascript初心者です。よろしくお願いします。 まず年月日を3つのセレクトボックスで作成する。 追加ボタンを押すと、選択した年月日のデータをリストボックスに書き出すことができる。 ※ここでリストボックスのサイズは3に指定しておき、項目が3以上の場合はスクロールさせる。 さらに削除ボタンを作成し、リストからデータを削除できるようにする。 以上のような仕組みを作りたいのですが... どうかよろしくお願いいたします。

  • PHP+ACCESSのデータベース接続について

    こんにちわ。PHP+ACCESSを使って、データベース接続を試みようとしておりますが、最初のところでつまづております。 <?php //データベースに接続する $DB = sqlite_open('db.mdb'); $SQL = "create table db (id integer ,name,time) $result = sqlite_query($DB, $SQL); ?> 上記のPHPで、ACCESSファイルを作成しましたが、作成したファイルを開くと、"データベース形式が認識できません"と表示し、データベースを閲覧することができません。 また、ACCESSから手動で作成したファイルをsqlite_openで接続しようとすると、sqlite_open(): file is encrypted or is not a database inエラーが表示接続することができません。 PHPとACCESSの相性の問題なのでしょうか。この原因がわかる方がいらっしゃいましたら、教えていただけないでしょうか。 宜しくお願い致します。 【php4.3.10 SQLite Library2.8.14 ACCESS2000】

    • ベストアンサー
    • PHP

専門家に質問してみよう