server.php 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211
  1. <?php
  2. function dump($var)
  3. {
  4. return highlight_string("<?php\n\$array = ".var_export($var, true).";", true);
  5. }
  6. $key_dir = dirname(dirname(__DIR__)) . '/tests/ssl';
  7. //$http = new swoole_http_server("0.0.0.0", 9501, SWOOLE_BASE);
  8. $http = new swoole_http_server("0.0.0.0", 9501);
  9. //$http = new swoole_http_server("0.0.0.0", 9501, SWOOLE_BASE, SWOOLE_SOCK_TCP | SWOOLE_SSL);
  10. //https
  11. //$http = new swoole_http_server("0.0.0.0", 9501, SWOOLE_BASE, SWOOLE_SOCK_TCP | SWOOLE_SSL);
  12. //$http->setGlobal(HTTP_GLOBAL_ALL, HTTP_GLOBAL_GET|HTTP_GLOBAL_POST|HTTP_GLOBAL_COOKIE);
  13. $http->set([
  14. // 'daemonize' => 1,
  15. // 'open_cpu_affinity' => 1,
  16. // 'task_worker_num' => 1,
  17. //'open_cpu_affinity' => 1,
  18. //'task_worker_num' => 100,
  19. //'enable_port_reuse' => true,
  20. 'worker_num' => 1,
  21. //'log_file' => __DIR__.'/swoole.log',
  22. // 'reactor_num' => 24,
  23. //'dispatch_mode' => 3,
  24. //'discard_timeout_request' => true,
  25. // 'open_tcp_nodelay' => true,
  26. // 'open_mqtt_protocol' => true,
  27. //'task_worker_num' => 1,
  28. //'user' => 'www-data',
  29. //'group' => 'www-data',
  30. //'daemonize' => true,
  31. // 'ssl_cert_file' => $key_dir.'/ssl.crt',
  32. // 'ssl_key_file' => $key_dir.'/ssl.key',
  33. // 'enable_static_handler' => true,
  34. // 'document_root' => '/home/htf/workspace/php/www.swoole.com/web/'
  35. ]);
  36. $http->listen('127.0.0.1', 9502, SWOOLE_SOCK_TCP);
  37. function chunk(swoole_http_request $request, swoole_http_response $response)
  38. {
  39. $response->write("<h1>hello world1</h1>");
  40. //sleep(1);
  41. $response->write("<h1>hello world2</h1>");
  42. //sleep(1);
  43. $response->end();
  44. }
  45. function no_chunk(swoole_http_request $request, swoole_http_response $response)
  46. {
  47. /**
  48. * Cookie Test
  49. */
  50. //$response->cookie('test1', '1234', time() + 86400, '/');
  51. // $response->cookie('test2', '5678', time() + 86400);
  52. // var_dump($response->cookie);
  53. // var_dump($request->cookie);
  54. // try
  55. // {
  56. // if (rand(1, 99) % 2 == 1)
  57. // {
  58. // throw new Exception("just for fun.");
  59. // }
  60. // $response->end("<h1>Hello Swoole. #".rand(1000, 9999)."</h1>");
  61. // }
  62. // catch(Exception $e)
  63. // {
  64. // $response->end("<h1>Exceptiom</h1><div>".$e->getMessage()."</div>");
  65. // }
  66. //var_dump($request->server['request_uri'], substr($request->server['request_uri'], -4, 4));
  67. if (substr($request->server['request_uri'], -8, 8) == 'test.jpg') {
  68. $response->header('Content-Type', 'image/jpeg');
  69. $response->sendfile(dirname(__DIR__) . '/test.jpg');
  70. return;
  71. } elseif ($request->server['request_uri'] == '/test.txt') {
  72. $last_modified_time = filemtime(__DIR__ . '/test.txt');
  73. $etag = md5_file(__DIR__ . '/test.txt');
  74. // always send headers
  75. $response->header("Last-Modified", gmdate("D, d M Y H:i:s", $last_modified_time) . " GMT");
  76. $response->header("Etag", $etag);
  77. if (strtotime($request->header['if-modified-since']) == $last_modified_time or trim($request->header['if-none-match']) == $etag) {
  78. $response->status(304);
  79. $response->end();
  80. } else {
  81. $response->sendfile(__DIR__ . '/test.txt');
  82. }
  83. return;
  84. } else if ($request->server['request_uri'] == '/favicon.ico') {
  85. $response->status(404);
  86. $response->end();
  87. return;
  88. } else if ($request->server['request_uri'] == '/code') {
  89. $response->sendfile(__FILE__);
  90. return;
  91. } elseif ($request->server['request_uri'] == '/save') {
  92. file_put_contents(__DIR__ . '/httpdata', $request->getData());
  93. $response->end('hello');
  94. return;
  95. } else {
  96. //var_dump($request->post);
  97. //var_export($request->cookie);
  98. // var_dump($request->rawContent());
  99. // if ($request->server['request_method'] == 'POST')
  100. // {
  101. // var_dump($request->post);
  102. // }
  103. // echo "GET:" . var_export($_GET, true)."\n";
  104. // echo "POST:" . var_export($_POST, true)."\n";
  105. // echo "get:" . var_export($request->get, true)."\n";
  106. // echo "post:" . var_export($request->post, true)."\n";
  107. //var_dump($request->server);
  108. $output = '';
  109. $output .= "<h2>HEADER:</h2>" . dump($request->header);
  110. $output .= "<h2>SERVER:</h2>" . dump($request->server);
  111. if (!empty($request->files)) {
  112. $output .= "<h2>FILE:</h2>" . dump($request->files);
  113. }
  114. if (!empty($request->cookie)) {
  115. $output .= "<h2>COOKIES:</h2>" . dump($request->cookie);
  116. }
  117. if (!empty($request->get)) {
  118. $output .= "<h2>GET:</h2>" . dump($request->get);
  119. }
  120. if (!empty($request->post)) {
  121. $output .= "<h2>POST:</h2>" . dump($request->post);
  122. }
  123. var_dump($request->post);
  124. //$response->header('X-Server', 'Swoole');
  125. //unset($request, $response);
  126. // swoole_timer_after(2000, function() use ( $response) {
  127. $response->end("<h1>Hello Swoole.</h1>" . $output);
  128. return;
  129. // });
  130. }
  131. //var_dump($request);
  132. // var_dump($_GET);
  133. //var_dump($_POST);
  134. //var_dump($_COOKIE);
  135. //$response->status(301);
  136. //$response->header("Location", "http://www.baidu.com/");
  137. //$response->cookie("hello", "world", time() + 3600);
  138. // $response->header("Content-Type", "text/html; charset=utf-8");
  139. //var_dump($request->post);
  140. // var_dump($request->get);
  141. // echo strlen(gzdeflate("<h1>Hello Swoole.</h1>"));
  142. // $response->end("<h1>Hello Swoole.</h1>");
  143. //$response->end("<h1>Hello Swoole. #".str_repeat('A', rand(100, 999))."</h1>");
  144. //global $http;
  145. //$http->task("hello world");
  146. $file = realpath(__DIR__ . '/../' . $request->server['request_uri']);
  147. if (is_file($file))
  148. {
  149. echo "http get file=$file\n";
  150. if (substr($file, -4) == '.php')
  151. {
  152. $response->gzip();
  153. }
  154. else
  155. {
  156. $response->header('Content-Type', 'image/jpeg');
  157. }
  158. $content = file_get_contents($file);
  159. echo "response size = " . strlen($content) . "\n";
  160. // $response->write($content);
  161. // $response->end();
  162. $response->end($content);
  163. }
  164. else
  165. {
  166. $response->end("<h1>Hello Swoole.</h1>");
  167. }
  168. }
  169. $http->on('request', function ($req, $resp) {
  170. $uri = $req->server['request_uri'];
  171. if ($uri == '/favicon.ico') {
  172. $resp->status(404);
  173. $resp->end();
  174. }
  175. elseif ($uri == '/chunk') {
  176. chunk($req, $resp);
  177. } else {
  178. no_chunk($req, $resp);
  179. }
  180. });
  181. $http->on('finish', function ()
  182. {
  183. echo "task finish";
  184. });
  185. $http->on('task', function ()
  186. {
  187. echo "async task\n";
  188. });
  189. //$http->on('close', function(){
  190. // echo "on close\n";
  191. //});
  192. $http->on('workerStart', function ($serv, $id)
  193. {
  194. //var_dump($serv);
  195. });
  196. $http->start();