start.php 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. <?php
  2. error_reporting(-1);
  3. //require_once __DIR__.'/vendor/autoload.php';
  4. use DI\Container;
  5. use Psr\Http\Message\ResponseInterface as Response;
  6. use Psr\Http\Message\ServerRequestInterface as Request;
  7. use Slim\Factory\AppFactory;
  8. use Slim\Views\PhpRenderer;
  9. use Db\Raw;
  10. global $app; // workerman
  11. Raw::init();
  12. $container = new Container();
  13. $container->set('view', new PhpRenderer('templates'));
  14. AppFactory::setContainer($container);
  15. $app = AppFactory::create();
  16. // Test 1: Plaintext
  17. $app->get('/plaintext', fn(Request $request, Response $response) =>
  18. $response
  19. ->write('Hello, World!')
  20. ->withHeader('Content-Type', 'text/plain')
  21. );
  22. // Test 2: JSON serialization
  23. $app->get('/json', fn(Request $request, Response $response) =>
  24. $response
  25. ->withJson(['message' => 'Hello, World!'])
  26. );
  27. // Test 3: Single database query
  28. $app->get('/db', function (Request $request, Response $response) {
  29. Raw::$random->execute([mt_rand(1, 10000)]);
  30. return $response
  31. ->withJson(Raw::$random->fetch());
  32. });
  33. // Test 4: Multiple database queries
  34. $app->get('/dbs', function (Request $request, Response $response) {
  35. $queries = $request->getParam('queries');
  36. if (is_numeric($queries)) {
  37. $queries = max(1, min($queries, 500));
  38. } else {
  39. $queries = 1;
  40. }
  41. $sth = Raw::$random;
  42. $worlds = [];
  43. for ($i = 0; $i < $queries; ++$i) {
  44. $sth->execute([mt_rand(1, 10000)]);
  45. $worlds[] = $sth->fetch();
  46. }
  47. return $response
  48. ->withJson($worlds);
  49. });
  50. // Test 5: Updates
  51. $app->get('/updates', function (Request $request, Response $response) {
  52. $queries = $request->getParam('queries');
  53. if (is_numeric($queries)) {
  54. $queries = max(1, min($queries, 500));
  55. } else {
  56. $queries = 1;
  57. }
  58. $sth = Raw::$random;
  59. //$updateSth = Raw::update();
  60. $worlds = [];
  61. for ($i = 0; $i < $queries; ++$i) {
  62. $sth->execute([mt_rand(1, 10000)]);
  63. $world = $sth->fetch();
  64. $world['randomNumber'] = mt_rand(1, 10000);
  65. $worlds[] = $world;
  66. }
  67. Raw::update($worlds);
  68. return $response
  69. ->withJson($worlds);
  70. });
  71. // Test 6: Fortunes
  72. $app->get('/fortunes', function (Request $request, Response $response) {
  73. Raw::$fortune->execute();
  74. $fortunes = Raw::$fortune->fetchAll(PDO::FETCH_KEY_PAIR);
  75. $fortunes[0] = 'Additional fortune added at request time.';
  76. asort($fortunes);
  77. return $this->get('view')->render($response, 'fortunes.php', ['fortunes' => $fortunes]);
  78. });
  79. //$app->run(); // comented with workerman
  80. // used by Workerman
  81. function run(): string
  82. {
  83. global $app;
  84. ob_start();
  85. $app->run();
  86. header(HeaderDate::$date); // To pass the bench, nginx auto add it
  87. return ob_get_clean();
  88. }