Enjoy programming more!
Kidspod is a post site which supports young programmers.
First step to join us.
Register as a member
For members

2020/04/23 12:55:44

MixJuice GET URL : kidspod.club/mj/959

伝言板 (PHP・MixJuice+BASIC)

MicJuice+IchigoJam BASIC でチャットみたいなものを作れないかと
以前から考えていて、ここまで実現できました。現在は更に改良しています。

?"MJ GET 15C.BALLOON.NET.EU.ORG/
↑わざと長い URL にしています。

?"MJ GET 15J.RUN/C (短縮URL)

で最新の書き込み 1 画面分が表示されます。
文字を入力すると下に追記されます。
SPACE を使うとエラー(400 Bad Request)になりますので、
代わりに Alt+Shift+0 を使用して下さい。

仕組みは簡単で、ファイル追記・行削除しているだけです。
任意の環境で使えるようにすると悪用の恐れが高まるので、
User Agent を参照して MixJuice 限定にしています。
Web サーバやプログラミング言語によって
カナや絵文字の使用に制限があるかもしれません。
Apache+PHP では URL エンコードなしでも正常に処理できています。

ID・パスワードは MixJuice のセッションが難しいので、
代わりにファイルをコピーして、任意の URL を個々に提供し、
(これがパスワード代わり)
その URL で投稿した時は判別できる表示にします。
(例えば CHR$(2)~(4) のハーフトーンなどは手入力できません)
実際運用している伝言板はこの方法で運営者は独自表示を実現しています。

  • 2
  • 2

SOURCE CODE

<?php

$ua = isset($_SERVER['HTTP_USER_AGENT'])? $_SERVER['HTTP_USER_AGENT'] : '';

if (stripos($ua, 'MixJuice') === false)
{
    header("Location: http://kidspod.club/program/default.html?id=959", true, 301);

    exit;
}

$file = "log";

$str = file_get_contents($file);
$str = str_replace(array("\r\n", "\r", "\n"), "\n", $str);
$data = explode("\n", $str);

$input = $_SERVER['QUERY_STRING'];
$input = trim($input);

if (strlen($input) > 0)
{
  if (count($data) >= 22)
  {
      array_shift($data);
  }
  //$input = "\x02admin\x02" . $input;
  array_push($data, $input);

  $str = implode("\n", $data);
  file_put_contents($file, $str);
}

foreach($data as $line)
{
  print "'{$line}\n";
}

//              1         2         3  ?
//     12345678901234567890123456789012|
print '?"MJ GET 15T.EXAMPLE.NET.EU.ORG/?';

COMMENT

Kidspod運営チーム
Kidspod運営チーム2020/04/27 18:19:00

これはなかなか面白そうな掲示板。最後に書き込み用のURLを返してくれるところが親切ですね。