fork download
  1. <?php
  2. //
  3. //ヒッキー板チャットクライアント
  4. //
  5. // サイト: http://c...content-available-to-author-only...l.cx/
  6. //
  7.  
  8. //定数的データ
  9. $client = "SJIS";
  10. $server = "UTF-8";
  11. $url = 'http://c...content-available-to-author-only...l.cx/api/';
  12. $commands = array(
  13. 'enter' => 1,
  14. 'read' => 1,
  15. 'write' => 1,
  16. 'leave' => 1
  17. );
  18.  
  19. //文字エンコード
  20. function enc($str) {
  21. global $client, $server;
  22. if ($client == $server) return $str;
  23. return mb_convert_encoding($str, $server, $client);
  24. }
  25. function dec($str) {
  26. global $client, $server;
  27. if ($client == $server) return $str;
  28. return mb_convert_encoding($str, $client, $server);
  29. }
  30.  
  31. //通信処理
  32. function postit($cmd, $msg = '') {
  33. global $url, $name, $commands;
  34. //コマンドの確認
  35. if (!isset($commands[$cmd])) {
  36. return false;
  37. }
  38. //送信データの用意
  39. $data = array('name' => $name);
  40. if ($cmd == 'write') {
  41. if ($msg == false) {
  42. return false;
  43. }
  44. $data['body'] = enc($msg);
  45. }
  46.  
  47. //通信部
  48. $curl = curl_init();
  49. curl_setopt($curl, CURLOPT_URL, $url . $cmd);
  50. curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
  51. curl_setopt($curl, CURLOPT_POST, 1);
  52. curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
  53. $result = curl_exec($curl);
  54. curl_close($curl);
  55.  
  56. return $result;
  57. }
  58.  
  59. //名前の入力
  60. do {
  61. echo 'Name?: ';
  62. $name = rtrim(fgets(STDIN));
  63. } while ($name == false);
  64. $name = enc($name);
  65.  
  66. //入室
  67. if (postit('enter') === false) {
  68. die("failed to enter." . PHP_EOL);
  69. }
  70.  
  71. //ループ
  72. do {
  73. //チャットの読み込みと表示
  74. if (($json = postit('read')) === false) {
  75. die("failed to read." . PHP_EOL);
  76. }
  77. $chat = json_decode($json);
  78. if (json_last_error() != JSON_ERROR_NONE) {
  79. postit('leave');
  80. die("failed by json.(" . json_last_error() .")\n");
  81. }
  82. foreach ($chat as $value) {
  83. echo '[', $value->time, ']', dec($value->name),': ', dec($value->body), PHP_EOL;
  84. }
  85. echo PHP_EOL;
  86.  
  87. //コマンドの入力
  88. echo 'Command: write read leave', PHP_EOL;
  89. do {
  90. echo '? ';
  91. $cmd = rtrim(fgets(STDIN));
  92. } while (!isset($commands[$cmd]));
  93.  
  94. //メッセージの入力
  95. if ($cmd == 'write') {
  96. do {
  97. echo 'message? ';
  98. $mes = rtrim(fgets(STDIN));
  99. } while ($mes == false);
  100. if (postit('write', $mes) === false) {
  101. die('failed to write.' . PHP_EOL);
  102. }
  103. }
  104. } while ($cmd != 'leave');
  105.  
  106. //退室
  107. postit('leave');
  108.  
  109. ?>
Runtime error #stdin #stdout #stderr 0.01s 20568KB
stdin
Hello
stdout
Name?: 
stderr
PHP Fatal error:  Call to undefined function curl_init() in /home/vHefJL/prog.php on line 48