キケッツ掲示板のリポジトリです. https://bbs.kekec.wiki
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

upload.php 3.0 KiB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. <?php
  2. require "${_SERVER['DOCUMENT_ROOT']}/database.php";
  3. define ('SAVE_DIR', 'image/'); // 保存ディレクトリ定義
  4. $thread = $_GET['thread'];
  5. file_put_contents ('log.txt', $thread);
  6. $json = getParamJSON (); // JSON パラメタ
  7. // JSON に data メトッドがなぃ場合
  8. if (!(isset ($json['data']))):
  9. sendResult (false, 'Empty query Parameter: data');
  10. exit (1);
  11. endif;
  12. // 適切な画像形式が示されてゐなぃ場合
  13. if (!(preg_match ('/^data:image\/png;base64,/', $json['data']))):
  14. sendResult (false, 'Not Allow data type: data');
  15. exit (1);
  16. endif;
  17. // 画像ディタをデコゥド
  18. $data = $json['data'];
  19. $data = str_replace ('data:image/png;base64,', '', $data);
  20. $data = str_replace (' ', '+', $data);
  21. $image = base64_decode ($data);
  22. $file = sprintf ('%s.png', uniqid ()); // ファイル名をタイマを基準に設定
  23. file_put_contents (SAVE_DIR . $file, $image, LOCK_EX); // 画像をファイルに保存
  24. $mysqli = set_mysql ('miteruzo_bbs'); // ディタ・べィス指定
  25. $mysqli -> set_charset ('utf8');
  26. // スレのレス数を取得し,適切なレス番を設定する.
  27. if ($result = $mysqli -> query ("
  28. SELECT
  29. length
  30. FROM
  31. threads
  32. WHERE
  33. id = $thread")):
  34. $row = $result -> fetch_assoc ();
  35. $id = $row['length'] + 1;
  36. $result -> close (); // クヱリ結果を閉ぢる.
  37. endif;
  38. if ($_GET['held']):
  39. mb_language ('Japanese');
  40. mb_internal_encoding ('UTF-8');
  41. mb_send_mail ('matuda.miteruzo@gmail.com', 'キケッツ掲示板の画像確認しろ!', '何か,保留中なうみ.', '謎');
  42. endif;
  43. // 投稿情報に従ひ,ディタ・ベィスを更新
  44. $sql = "INSERT INTO
  45. responses (thread_id, response_id, name, pass, message, date, image, held,
  46. deleted)
  47. VALUES
  48. ($thread, $id, '" . (($_GET['name'] == '') ? '名なしさん' : $_GET['name']) . "',
  49. " . (($_GET['pass'] == '') ? "NULL" : "'{$_GET['pass']}'") . ", '', '" . date ('Y-m-d H:i:s') . "', '$file', {$_GET['held']}, 0)";
  50. $mysqli -> query ($sql);
  51. $mysqli -> query ("
  52. UPDATE
  53. threads
  54. SET
  55. length = $id, latest = '" . date ('Y-m-d H:i:s') . "' WHERE id = $thread");
  56. $mysqli -> close (); // ディタ・べィスを閉ぢる.
  57. unlink ('draft/' . $_COOKIE['backup']);
  58. setcookie ('backup', '', 0);
  59. /*
  60. * フェッチ内容から JSON パラメタを取得する.
  61. *
  62. * 戻り値は,取得した JSON パラメタ.
  63. */
  64. function
  65. getParamJSON ()
  66. {
  67. $buff = file_get_contents ('php://input');
  68. $json = json_decode ($buff, true);
  69. return ($json);
  70. }
  71. /*
  72. * クヱリ送信者に,結果を返す.
  73. * $status:結果フラグ,$data:返信ディタ
  74. *
  75. * 戻り値は,なし.
  76. */
  77. function
  78. sendResult ($status, $data)
  79. {
  80. header ('Access-Control-Allow-Origin: *');
  81. header ('Access-Control-Allow-Headers: *');
  82. echo json_encode(["status" => $status,
  83. "result" => $data]);
  84. }