410.coffee

まじめにふざける。

NINTENDO64でYoutube配信する方法!必要機材など

 

最近、ゲーム実況が流行っています。

 

ゲーム実況をしたい人の中にはレトロゲームの実況をしたいという人がいるのではないでしょうか?

 

今日は必要機材等々を紹介していきます。

 

 

実機?エミュレータ?

 

配信するうえで、実機とエミュレータという選択肢があります。

 

基本的に私は実機推しです。

 

エミュレータはROMさえあればPCだけでできるという利点がありますが、

 

違法ROMなどの存在もあるので世間からの目はあまりよろしくないです。

 

必要機材一覧

 

まず、一覧をご覧ください

 

・ゲーム機
・配信用PC
・モニター or ブラウン管
・キャプチャーボード

 

とりあえずモニターはPC用とゲーム機用の二枚が必要です。

 

重要なのはキャプチャーボードです。

 

ゲーム機を用意する

 

基本的にはレトロゲーですので中古となります。

 

 

ソフトが付属しているといいですね

 

 

中古がどうしてもいやだという方は少々お高いですが新品もあります。

 

ソフトなどは中古屋さんなどで買うと安く済むかもですね。

 

配信用PCを用意する

 

配信にはそれなりのスペックがいります。

 

これを機に新調してみてはいかがでしょうか?

 

今日はあまり触れないでおきます。

 

また、自作PCをする方はぜひこちらの記事を読んでみてください。

 

410.coffee

 

ゲーム用モニターを用意する

 

レトロゲームです。

 

ですからHDMIなんてものはなく三色ケーブルなわけですが、

 

現在三色ケーブルに対応しているモニターはありません。

 

ですからブラウン管を買うしかありません。

 

しかしでかいしエコではないためためらいますね...

 

買うならメルカリなどがおすすめですよ!

 

キャプチャーボードを用意する

 

まず、ブラウン管につなぐケーブルとPCにつなぐケーブルとで分岐させる必要があります。

 

 

延長させてから、

 

 

分岐させます。

 

これであとはキャプチャボードにつなぎPCに接続するだけです。

 

 

ゲーム画面を取り込むには

 

アマレコTV様がおすすめです。

 

www.amarectv.com

 

最後に

 

これで準備はOK!

 

ゲーム実況を楽しんでくださいね!

 

 

 

自作PCを組んで超後悔した話

どうも410です。

皆さん、自作PC って知ってますか?

通常市販のPCはメーカーさんがパーツを集めてそれを組んで売ってくれるのですが、

自作PCはパーツを全部集めて自分で組みます。

もちろん保証もついていますがパーツごとなので壊したら超だるいです。

今日はそんな自作PCを 初めてのPC にしたときの後悔談です。

最初の3行まとめ


最初に買うPCはノートパソコンにしとけ
自作することで安くはならない
スペックはあったほうがいいは大間違い

スペック


とりあえず私のPCのスペックです。


CPU -- AMD Ryzen 5 5600G
メモリ -- 16GB
SSD -- 120GB
HDD -- 1TB
電源 -- 玄人志向 500w 80PLUS シルバー
マザーボード -- MSI B550 GAMING PLUS
OS -- WINDOWS 10 PRO


グラフィックボードの代わりにAPUを積んでいます。

また、ケチれるところはとことんケチっています。

自作PCの利点とは?


一番の利点はカスタマイズが効くからです。

好きなケースであったり、好きな性能に自分で決められるのです。

むしろそれが醍醐味なのです。

もちろんそれにはお金がかかるしお金をかけるところでもあります。

とんでもない勘違い


僕はカスタマイズよりあるところに注目してました。

それは安さです。

ポイントはいるし普通にパソコン買うより安いんじゃね?


実際は違いました。

失敗ポイント1.周辺機器に金が吸われる

  • モニター
  • マウス
  • キーボード
  • スピーカー

ノートパソコンなら全部ついてきます。

デスクトップにはありません。

買いそろえるために安くても 2万円はします。

もちろんそれは普通にデスクトップを買っても言えることです。

しかし、自作ならではの失敗がありました。

失敗ポイント2.PCの値段しか見ていない


例えば予算10万円で組みたいってなったとき、あなたならいくらでPCを組みますか?

おそらく10万円ぴったり使い切るとおもいます。


過ちでした。


この予算がもしPCを使えるまでにするための予算ならそれ詰んでます。

周辺機器だったりでもうすでに予算オーバーです。

実際に、最初8万で組むって言っていたところを周辺機器合わせて最終的に12万にふくれあがりました。


それなら最初からMac Bock買えたんじゃね?

失敗ポイント3.過剰スペック


正直CPUこんな高性能なのいらなかったです。

容量もSSDすら使い切っていません。

メモリなんて使用率4GBも超えませんでした。

明らかに過剰スペックです。

なぜ過剰スペックになってしまうのか


自作PCあるあるなのですが、

わずか数千円の違いで高スペックにできてしまうため、

いつの間にかそれが連鎖していらないスペックになってしまいます。

事実プログラミングのみなら3万でもくめましたし、

周辺機器とか買うんだったらMac Bock買ったほうが今ごろ幸せでした。

前のPCの経験から


これは完全に僕が過剰スペックにしてしまった理由なのですが、

前のPCがクソスペック過ぎて何もかもに時間がかかるような状態でした。


もしここでケチって低スぺにしたら前のPCのようになるのではないか…


そんな不安がありました。

こんなのじゃ足りない…を繰り返していずれ過剰スペックになってしまいました。

また、高スペックへの魅力とあこがれもありました。

失敗ポイント4.いらんところでケチる


自作PCの醍醐味 カスタマイズが効く だったはずが、

僕はケチりた過ぎてケースをケチりました。

その結果がこちら

机の三分の一を占領されてしまう事態になりました。

超邪魔なんですけど。

このケース、店頭でもよく見かけます。

でも、 ブルーライトがまぶしくても消せないケース なのでやめておいたほうがいいです。

失敗ポイント5.ダサい


はい。なぜか七色に光っております。

ダサいです。

コードの色も七色です。

どうしても安いパーツを選ぶと光ります。

なぜ安いパーツほど光らせたがるのか理解できません。

自作PCの醍醐味ってなんだっけ?

まとめ


PCほしいなーって思ってる皆さん。

これだけは言えます。


自作だけはやめとけ


特に低予算だけは絶対にやめましょう。

ノートパソコンのほうがよかった…

KSNCTF #.03 Crawling Chaosを解く

問題文の意味が、

這う と 混沌 なので確実に例の這いよる混沌ですね。

(」・ω・)」うー!(/・ω・)/にゃー!

Crawling Chaos

問題にはただ unya.html が鎮座しているだけですね。

開いてみます。

うーん。

なんですかこれは。

フォームと送信ボタンが鎮座しています。

何か送信してみても当然何も起きません。

開発者ツール

htmlの問題と言ったら開発者ツール見ないとだめですよねえ?

ということで見てみた。

うぎゃー!

何じゃこれは!

予想通り例の這いよる混沌でしたね。。

しかし明らかに意味ありげですよね、

scriptの中に書かれているのもイミフ

調べてみた

分からないので

(」・ω・)」うー!(/・ω・)/にゃー!

で調べてみました。

そしたらこんなサイトがっ!!!

sanya.sweetduet.info

難読化だとっ?!

つまりこれはちゃんとしたJava scriptだったんですね、、

だったら実行するしかねえ!

こちらのサイトで実行させてもらいました。

paiza.io

するとある発見が!

$(function(){$("form").submit(function(){var t=$('input[type="text"]').val();
var p=Array(70,152,195,284,475,612,791,896,810,850,737,1332,1469,1120,1470,832,1785,2196,1520,1480,1449);
var f=false;
if(p.length==t.length){f=true;
for(var i=0;i<p.length;i++)if(t.charCodeAt(i)*(i+1)!=p[i])f=false;
if(f)alert("(」・ω・)」うー!(/・ω・)/にゃー!");
}if(!f)alert("No");
return false
;});
});

復号化されましたねえ………で?

いや僕Javascriptとかやったことないんですけど??!!

まあでもpが怪しいですよね。

意味ありげに鎮座してます。

t.charCodeAt

おまえ怪しいぞ!

てことで調べました。

charCodeAt

何か知らんけど文字を65535までの整数で返してくるらしい。

つまりpはもともと文字だったってことですね?!

調べたら、数字から戻すには

String.fromCharCode

を使うらしいです。

何も考えずに組んでみた

なにやら数式とかいろいろ書いていますけど知らん。

これで勝つる!

console.log(String.fromCharCode(70,152,195,284,475,612,791,896,810,850,737,1332,1469,1120,1470,832,1785,2196,1520,1480,1449));

結果

FÃĜǛɤ̗΀̪͒ˡԴֽѠ־̀۹࢔װ׈֩

は?

なんで文字化けしてんだよ!

間違い

すみません。

解釈違いでした。

どうやら単なる整数じゃなくてUTF-16らしいです。

もっかいコードよく見てみると、

for(var i=0;i<p.length;i++)if(t.charCodeAt(i)*(i+1)!=p[i])f=false;

iに1足してかけてると思えます。

確かにFだけ普通でしたわ。

除算すればいいんですね。

人力で行きます。

152÷(1+1)=76
195÷(2+1)=65...

やばい絶対あってるけどこうじゃない。

絶対普通にコード書いたほうがいい。

でもかけなあい。

仕方ないです。はい。

すみませんでした。

でも何とか解けましたありがとうございます。

KSNCTF #.02 Easy Cipherを解く

今日も今日とて解いていきます。

今日は第二問、Easy Cipher 簡単な暗号ですね。

ではいきましょう。

Easy Cipher

とりあえず問題を見てみましょう。

EBG KVVV vf n fvzcyr yrggre fhofgvghgvba pvcure gung ercynprf n yrggre jvgu gur yrggre KVVV yrggref nsgre vg va gur nycunorg. EBG KVVV vf na rknzcyr bs gur Pnrfne pvcure, qrirybcrq va napvrag Ebzr. Synt vf SYNTFjmtkOWFNZdjkkNH. Vafreg na haqrefpber vzzrqvngryl nsgre SYNT.

うーん、見た感じわけわからん文字列ですね。

まあ多分暗号とかなんでしょいうけど、

よく見てみると空白とかピリオドがありますね。

英文でしょうか?

気になるのは vf とか vg va ですね。

英文で2文字でイニシャルが同じな単語は is it in とかでしょうか。

これ多分シーザー暗号ですね。

あの何文字かずらすやつです。

ja.wikipedia.org

試してみますか

解読

linesegment.web.fc2.com

こちらのサイトをお借りしたいと思います、

たぶん一文字ずらすとかじゃないと思うので全パターン試してみます。

文になっているのは13文字ですかね。

答えはここには書かないでおきます。

それではさようならー

KSNCTF #.01 Test Problemを解く

今日からハッカーを目指すためにKSNCTFを解いていきます。

Test Problem

記事にしようか迷いましたが一応順番ということで解きます。

はい。

なんと答えが書いてあります。

そのまま入れます。

あとはSubmitを押すと…

クリアです。

あっけねー

まあチュートリアルですから。

PHPでURL短縮サービスを自作してみた|サンプルコードあり

私ある日URL短縮してえなと思って作り方調べたんですけど、

Googleなんちゃらとかめんどくさそうなので自作することにします。

仕組みを考える

URL短縮の仕組みってどうなってんですかね

分からんので自分で考えます。

短縮したURLって、

https://○○○.com/△△△

みたいな感じで△△△のところが変わって出てきますよね

ディレクトリじゃね?

△△△の後にindex.htmlが隠れているのでは?!

フォームからURLを受けとる

とりあえずフォームを作って内容を受け取れるようにします。

  <?php
    $url = $_POST[url];
   ?>
  <body>
    <form action="index.php" method="post">
    <input type="text" name="url">
    <input type="submit" name="sub" value="送信">
    </form>
  </body>

url変数にそのまま入力されたやつをぶち込むという形です。

しかしこのままだとurl以外も処理しちゃうので早めに手を打ちます。

URLかどうか判断するには

filter_var関数

を使います。

  if(filter_var($url, FILTER_VALIDATE_URL)){

  }

これでURLだった場合のみ処理されるようにできました!

これで私のサーバー容量事情解決ですね。

ディレクトリを作りたい

次にディレクトリを作っていきます。

ディレクトリを作るには、

mkdir関数を使います。

  $path = "url/";
  mkdir($path, 0777, true);

はい、無事我がサーバーにurlというディレクトリができていました。

しかしねえ…

ディレクトリ名が被らないようにするためにはどうしましょう

連番を振る

これしかないわけで…

ということでcount.txtを作って、
1を追記しまくってそのファイルの容量で連番を振る形になりました。

適当にSubmitから呼び出し食らったらファイルに追記するコードを書きます。

  if (isset($_POST['sub'])) {
    $file_handle = fopen( "./count.txt", "a");
    fwrite( $file_handle, '1');
    fclose($file_handle);
  }

んで適当にファイルの容量を読み取るコードを書きます。

  $count = filesize("./count.txt");

それを作成するディレクトリ名に振れば―?

  mkdir($count, 0777, true);

完成ですね。

これで1,2,3,4,5,…みたいな感じでディレクトリが作成されると思います。

ディレクトリの中に新しくファイルを作る

次にさっき作ったディレクトリの中に新しくindex.htmlを作ってもらいます。

新しくファイルが作りたいなら、

fopen関数

を使います。知らんけど

とりあえずさっき作ったディレクトリにindex.htmlという名のファイルを作ってもらいます。

  fopen('./'.$count.'/index.html', "a");

あってるかわかりませんけどできてるんでできてるんだと思います。

htmlのなかに書きたい

このままだともぬけの殻のhtml君なので、命を授けたい。

そのためには

fwrite関数

がきっと役に立ちます。

さっきのをちょっと改良して、

  $file_handle = fopen('./'.$count.'/index.html', "a");
  fwrite( $file_handle, $template);
  fclose($file_handle);

こんなんになりました。

あとは$templateに書きたいものを書くだけです。

たしか、htmlから別のサイトに転移するためには

<META HTTP-EQUIV='refresh' CONTENT='秒; URL='>

的なのつかったと思うので、それを書いていきます。

  $template = '<META HTTP-EQUIV="refresh" CONTENT="0; URL='.$url.'">';

うーん、いい出来ですね。

0秒で$urlに飛ぶって感じです。

もうこれでほとんど完成なのですが、

最後にひと手間

完成したURLを表示

これやっとかないとダメですね

  print('https://○○○.com/'.$count.'/');

はい。これで完全に完成ですね。

最後に

思い付きで始めましたがうまくいってよかったです。

ただ、もっといいやり方があるかもしれませんが…

お役に立てたらうれしいです。

それでは!

サンプルコード

ご自由にお使いください~

<!DOCTYPE html>
<html lang="ja" dir="ltr">
  <head>
    <meta charset="utf-8">
    <title></title>
  </head>
  <?php
    $url = $_POST[url];

    $template = '<META HTTP-EQUIV="refresh" CONTENT="0; URL='.$url.'">';

    if (isset($_POST['sub'])) {
      if(filter_var($url, FILTER_VALIDATE_URL)){
        $file_handle = fopen( "./count.txt", "a");
        fwrite( $file_handle, '1');
        fclose($file_handle);

        $count = filesize("./count.txt");

        mkdir($count, 0777, true);

        $file_handle = fopen('./'.$count.'/index.html', "a");
        fwrite( $file_handle, $template);
        fclose($file_handle);

        print('https://○○○.com/'.$count.'/');
      }
    }
   ?>
  <body>
    <form action="index.php" method="post">
    <input type="text" name="url">
    <input type="submit" name="sub" value="送信">
    </form>
  </body>
</html>

【入門】PHPでファイルアップロードサービスを作る。|サンプルコードあり

今回は、画像アップロードサービスをメインにやっていきます。

画像をアップロードしたらurlが返ってくるというものです。

それではやっていきましょう。

動作環境を整える

こちらはサーバー必須となっています。

サーバーを立てるか、借りるかして確保してください。

Indexの作成

今回はphpで作成するので、

index.php

を作成し、以下を貼り付けてください。

<!DOCTYPE html>
<html lang="ja" dir="ltr">
  <head>
    <meta charset="utf-8">
    <title>uploader</title>
  </head>
  <?php
   ?>
  <body>

  </body>
</html>

ファイルを選択できるようにしたい

postのfrom作ります。

<form action="index.php" method="post" enctype="multipart/form-data">
  <input type="file" name="up" accept="image/*">
  <input type="submit" name="sb">
</form>

これでおそらく画像が選択できるようになったと思います。

次にこれを受け取る処理を書きます。

ファイルをサーバーにアップロードする

とりあえず日時を取得します。

if (isset($_POST['sb'])) {
  $date = date("Ymdwhms");
}

ファイルの名前はその時の日時で行きたいと思います。

これはsubmitが押されたら日時を取得するというものです。

サーバーに何かをアップロードするときは、

move_uploaded_file()

を使います。

これをこう記述するとサーバーにpngがあると思います。

if(!empty($_FILES)){
   $uploaded_path = './'.$date.'.png';
   $result = move_uploaded_file($_FILES['up']['tmp_name'],$uploaded_path);
}

画像が選択されていたら、ファイル名を日時にして端子をpngにするというものです。

これだと強制的にpngになってしまうのであまりよくありませんが今回は割愛します。

URLを付与したい

アップロードした画像は今どこにいるのでしょうか。

○○○.com/ここ

ですよね。

つまり、自分のウェブサイトのドメインの後に日時.pngをくっつけてやります。

if(!empty($_FILES)){
  $uploaded_path = './'.$date.'.png';
  $result = move_uploaded_file($_FILES['up']['tmp_name'],$uploaded_path);
  echo "https://○○○.com/".$date.".png";
}

○○○.comのところはご自身のドメインに変えてください。

これで画像をアップロードすると、URLがもらえたと思います。

最後に

今回は以上となります。

結構短くできました。

注意点

サーバーによっては、このようにアップロードするのを禁じている場合があります。
ご確認下さい。

個人情報やポルノなどアップロードされると最悪罰せられます。
今回のソースコードはあくまで練習としてお使いください。

サンプルコード

<!DOCTYPE html>
<html lang="ja" dir="ltr">
  <head>
    <meta charset="utf-8">
    <title>uploader</title>
  </head>
  <?php
    if (isset($_POST['sb'])) {
      $date = date("Ymdwhms");
    }
    if(!empty($_FILES)){
      $uploaded_path = './'.$date.'.png';
      $result = move_uploaded_file($_FILES['up']['tmp_name'],$uploaded_path);
      echo "https://○○○.com/".$date.".png";
    }
   ?>
  <body>
    <form action="index.php" method="post" enctype="multipart/form-data">
      <input type="file" name="up" accept="image/*">
      <input type="submit" name="sb">
    </form>
  </body>
</html>

【入門】PHPで掲示板を作る|サンプルコードあり

掲示板は結構いい練習になります。

張り切っていきましょう!

動作環境を整える

今回はサーバーを使用しますので、

サーバーを立てるか無料レンタルサーバーを借りましょう。

Indexの作成

今回はPHPで作成するため、端子は.phpの

index.php

を作成します。

作成出来たらいつもの書きます。

<!DOCTYPE html>
<html lang="ja" dir="ltr">
  <head>
    <meta charset="utf-8">
    <title>bbs</title>
  </head>
  <?php

   ?>
  <body>

  </body>
</html>

POSTから情報を受け取る

今回の肝です。

HTMLのFromタグから情報を受け取ります。

<body>
    <form action="index.php" method="post">
    <input type="text" name="comment"><br/>
    <input type="submit" value="送信">
    </form>
</body>

とりあえずPOSTのフォームと、submitを作成します。

このフォームから情報を受け取るには、

$_POST[‘(name)’]

を使用します。

試しに入力された情報を表示してみましょう。

<?php
  $comment = $_POST[comment];
  print($comment);
?>

これで入力された情報が表示できたと思います。

データを保存しよう

次に、入力された情報がデータとなって保存できるようにしたいと思います。

今回はtxtに保存する方式で行きます。

まずはその核となるtxtファイルを作成しましょう。

今回は comment.txt にします。

ファイルを読み込もう

ファイルの読み込みは

$filename = 'comment.txt';
 
$fp = fopen($filename, 'r');

$txt = fgets($fp);

//ここに処理

fclose($fp);

この一連の動作で可能です。

てことで comment.txt に何か適当なことを入れてください。

そしたら表示してみます。

<?php

  $filename = 'comment.txt';
  $fp = fopen($filename, 'r');
  $txt = fgets($fp);

  print($txt);

  fclose($fp);
?>

表示できましたでしょうか。

これで半分完成とまではいきませんがあと少しです。

ファイルに書き込もう

今回は掲示板なので、追記しようのほうが正しいですね。

さて、先ほどはtxtの中身を表示させましたが、今回は追記するだけです。

追記するにはrからaに変えましょう。

<?php

  $fp = fopen($filename, 'r→a');
  fclose($fp);

?>

実は r は読み込み専用で、

aは書き込み(追記専用)です。

それとは別にw、書き込み(上書き)などもあります。

<?php

  $comment = $_POST[comment];

  $filename = 'comment.txt';
  $fp = fopen($filename, 'a');

  fwrite($fp,"<p>".$comment."</p>\n");

  fclose($fp);

  if (isset($_POST['sub'])) {
    $fp = fopen($filename, 'r');
      while ($txt = fgets($fp)) {
        echo $txt;
      }
    fclose($fp);
  }

?>

少し複雑なことをしていますね。

簡単に説明すると、

追記して、submitから反応があれば表示

という感じです。

とりあえず十分掲示板の機能はありますね。

もっと掲示板ぽくしていきます。

現時点

<!DOCTYPE html>
<html lang="ja" dir="ltr">
  <head>
    <meta charset="utf-8">
    <title>bbs</title>
  </head>
  <?php
    $comment = $_POST[comment];

    $filename = 'comment.txt';
    $fp = fopen($filename, 'a');

    fwrite($fp,"<p>".$comment."</p>\n");

    fclose($fp);

    }

   if (isset($_POST['sub'])) {
     $fp = fopen($filename, 'r');
     while ($txt = fgets($fp)) {
      echo $txt;
    }
    fclose($fp);

   ?>
  <body>
    <form action="index.php" method="post">
    <input type="text" name="comment"><br/>
    <input type="submit" name="sub" value="送信">
    </form>
  </body>
</html>

空欄かどうか判定しよう

今の状態だと実は、空欄のまま送信しても書き込まれちゃいます。

これだと容量の無駄ですよね。

ということで空欄かどうか判定していきます。

<?php
if (isset($_POST['sub'])) {
  if (empty($comment)) {
    header('Location: ./error.html');
    exit;
  }else {
        $fp = fopen($filename, 'a');

        fwrite($fp,"<p>".$comment."</p>\n");
 
        fclose($fp);
  }
}
?>

ついでにerror.htmlも作って、エラーメッセージを表示をさせましょう。

<!DOCTYPE html>
<html lang="ja" dir="ltr">
  <head>
    <meta charset="utf-8">
    <title>Error</title>
  </head>
  <body>
    <p>Error : 101</p>
    <p>コメント が書かれていません</p>
    <p>三秒後に元のページへ戻ります。</p>
    <META HTTP-EQUIV='refresh' CONTENT='3; URL=./index.php'>
  </body>
</html>

これでOkです。

二重投稿対策をしよう。

結構地味ですが重要ですよ。

クロームなどを使用していると、送信した後に

更新をしようとすると二重投稿になってしまいます。

まずいので対策します。

まずはreload.htmlを作成してください。

<!DOCTYPE html>
<html lang="ja" dir="ltr">
  <head>
    <meta charset="utf-8">
    <title>Reload</title>
  </head>
  <body>
    <p>投稿しました</p>
    <p>三秒後に元のページへ戻ります。</p>
    <p>※二重投稿のもとになるためブラウザバックはお控えください。</p>
    <META HTTP-EQUIV='refresh' CONTENT='3; URL=./index.php'>
  </body>
</html>

次にindex.phpに移ります。

さっき書いた投稿のコードに少し書き足します。

<?php
  if (empty($comment)) {
    header('Location: ./error.html');
    exit;
  }else {
        $fp = fopen($filename, 'a');

        fwrite($fp,"<p>".$comment."</p>\n");
 
        fclose($fp);

        header('Location: ./reload.html'); //ここ
  }
?>

これで対策は完了です。

IDや連番を振ろう

少し細かいところを作っていきます。

時間を表示しよう

時間を表示させるにはdateを使います。

$date = date('YmdHis');
$time = date('Y:m:d H:i:s');

左から、年 月 日 (週)時間 分 秒 です。

これらを使っていつ投稿されたかわかるようにします。

$write = "<p>".$time."</p><p>".$comment."</p>\n";

fwrite($fp,$write);

書き換えてください。

これでおそらく時間がでかでかと書かれていると思います。

連番を振る

やはり重要です。

何スレ目かは欠かせないですね。

今回は楽したいのでtxtを使います。

count.txtを作成してください。

$file_handle = fopen( "./count.txt", "a");
fwrite( $file_handle, '1');
fclose($file_handle);

$count = filesize("./count.txt");

書く処理のあたりにこれを配置します。

したらあとはこちらに上書きしてください。

$write = "<p>".$count." ".$time."</p><p>".$comment."</p>\n";

これで連番は完成です。

1000超えたら書き込めないようにする。

完全番外編です。

全ての処理を、こちらで囲むとできます。

if ($count > 1000) {
}else {
//ここに
}

IDを付与したい

これはやり方色々ありますが、今回はcookieを使用します。

session_start();

$_COOKIE[session_name()];
$id = mb_substr( $_COOKIE[session_name()], 0, 6, "UTF-8" );

解説すると、クッキーIDを取得してそれを6文字で表示させます。

あとはこちらをコピーして上書きしてください。

$write = "<p>".$count." ".$time." ".$id."</p><p>".$comment."</p>\n";

ハンドルネームをつけたい

とりあえずコメントの横に新しいフォームを作ります。

<form action="index.php" method="post">
   <input type="text" name="comment"><input type="text" name="my_name" placeholder="ハンドルネーム(省略可)"><br/>
   <input type="submit" name="sub" value="送信">
</form>  

そしたら、ハンドルネームがある場合とない場合で条件分岐させます。

if(empty($my_name = $_POST["my_name"])){
  $myname = "匿名さん";
}
else {
  $myname = $_POST["my_name"];
}

あとはこれを上書きしてください。

$write = "<p>".$count." ".$myname." ".$time." ".$id."</p><p>".$comment."</p>\n";

これでハンドルネームは完成です。

最後に

これで掲示板が完成したと思います。

結構いい練習になりましたか?

それではまた別の機会で~

サンプルコード

index.php

<!DOCTYPE html>
<html lang="ja" dir="ltr">
  <head>
    <meta charset="utf-8">
    <title>bbs</title>
  </head>
  <?php
    session_start();

    $comment = $_POST[comment];

    $filename = 'comment.txt';

    $date = date('YmdHis');
    $time = date('Y:m:d H:i:s');

    $_COOKIE[session_name()];
    $id = mb_substr( $_COOKIE[session_name()], 0, 6, "UTF-8" );

    if(empty($my_name = $_POST["my_name"])){
      $myname = "匿名さん";
    }
    else {
      $myname = $_POST["my_name"];
    }

    if (isset($_POST['sub'])) {

      if (empty($comment)) {
        header('Location: ./error.html');
        exit;
      }else {

        $file_handle = fopen( "./count.txt", "a");
        fwrite( $file_handle, '1');
        fclose($file_handle);

        $count = filesize("./count.txt");

        $fp = fopen($filename, 'a');

        $write = "<p>".$count." ".$myname." ".$time." ".$id."</p><p>".$comment."</p>\n";

        fwrite($fp,$write);

        fclose($fp);

        header('Location: ./reload.html');
      }

    }

    $fp = fopen($filename, 'r');
      while ($txt = fgets($fp)) {
        echo $txt;
      }
    fclose($fp);

   ?>
  <body>
    <form action="index.php" method="post">
    <input type="text" name="comment"><input type="text" name="my_name" placeholder="ハンドルネーム(省略可)"><br/>
    <input type="submit" name="sub" value="送信">
    </form>
  </body>
</html>

error.html

<!DOCTYPE html>
<html lang="ja" dir="ltr">
  <head>
    <meta charset="utf-8">
    <title>Error</title>
  </head>
  <body>
    <p>Error : 101</p>
    <p>コメント が書かれていません</p>
    <p>三秒後に元のページへ戻ります。</p>
    <META HTTP-EQUIV='refresh' CONTENT='3; URL=./index.php/'>
  </body>
</html>

reload.html

<!DOCTYPE html>
<html lang="ja" dir="ltr">
  <head>
    <meta charset="utf-8">
    <title>Reload</title>
  </head>
  <body>
    <p>投稿しました</p>
    <p>三秒後に元のページへ戻ります。</p>
    <p>※二重投稿のもとになるためブラウザバックはお控えください。</p>
    <META HTTP-EQUIV='refresh' CONTENT='3; URL=./index.php'>
  </body>
</html>

comment.txt

  

count.txt