123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193 |
- <?php
- if ('cli-server' !== \PHP_SAPI) {
- // safe guard against unwanted execution
- throw new \Exception("You cannot run this script directly, it's a fixture for TestHttpServer.");
- }
- $vars = [];
- if (!$_POST) {
- $_POST = json_decode(file_get_contents('php://input'), true);
- $_POST['content-type'] = $_SERVER['HTTP_CONTENT_TYPE'] ?? '?';
- }
- foreach ($_SERVER as $k => $v) {
- switch ($k) {
- default:
- if (0 !== strpos($k, 'HTTP_')) {
- continue 2;
- }
- // no break
- case 'SERVER_NAME':
- case 'SERVER_PROTOCOL':
- case 'REQUEST_URI':
- case 'REQUEST_METHOD':
- case 'PHP_AUTH_USER':
- case 'PHP_AUTH_PW':
- $vars[$k] = $v;
- }
- }
- $json = json_encode($vars, \JSON_PRETTY_PRINT | \JSON_UNESCAPED_SLASHES | \JSON_UNESCAPED_UNICODE);
- switch ($vars['REQUEST_URI']) {
- default:
- exit;
- case '/head':
- header('Content-Length: '.strlen($json), true);
- break;
- case '/':
- case '/?a=a&b=b':
- case 'http://127.0.0.1:8057/':
- case 'http://localhost:8057/':
- ob_start('ob_gzhandler');
- break;
- case '/103':
- header('HTTP/1.1 103 Early Hints');
- header('Link: </style.css>; rel=preload; as=style', false);
- header('Link: </script.js>; rel=preload; as=script', false);
- flush();
- usleep(1000);
- echo "HTTP/1.1 200 OK\r\n";
- echo "Date: Fri, 26 May 2017 10:02:11 GMT\r\n";
- echo "Content-Length: 13\r\n";
- echo "\r\n";
- echo 'Here the body';
- exit;
- case '/404':
- header('Content-Type: application/json', true, 404);
- break;
- case '/404-gzipped':
- header('Content-Type: text/plain', true, 404);
- ob_start('ob_gzhandler');
- @ob_flush();
- flush();
- usleep(300000);
- echo 'some text';
- exit;
- case '/301':
- if ('Basic Zm9vOmJhcg==' === $vars['HTTP_AUTHORIZATION']) {
- header('Location: http://127.0.0.1:8057/302', true, 301);
- }
- break;
- case '/301/bad-tld':
- header('Location: http://foo.example.', true, 301);
- break;
- case '/301/invalid':
- header('Location: //?foo=bar', true, 301);
- break;
- case '/302':
- if (!isset($vars['HTTP_AUTHORIZATION'])) {
- header('Location: http://localhost:8057/', true, 302);
- }
- break;
- case '/302/relative':
- header('Location: ..', true, 302);
- break;
- case '/304':
- header('Content-Length: 10', true, 304);
- echo '12345';
- return;
- case '/307':
- header('Location: http://localhost:8057/post', true, 307);
- break;
- case '/length-broken':
- header('Content-Length: 1000');
- break;
- case '/post':
- $output = json_encode($_POST + ['REQUEST_METHOD' => $vars['REQUEST_METHOD']], \JSON_PRETTY_PRINT | \JSON_UNESCAPED_SLASHES | \JSON_UNESCAPED_UNICODE);
- header('Content-Type: application/json', true);
- header('Content-Length: '.strlen($output));
- echo $output;
- exit;
- case '/timeout-header':
- usleep(300000);
- break;
- case '/timeout-body':
- echo '<1>';
- @ob_flush();
- flush();
- usleep(500000);
- echo '<2>';
- exit;
- case '/timeout-long':
- ignore_user_abort(false);
- sleep(1);
- while (true) {
- echo '<1>';
- @ob_flush();
- flush();
- usleep(500);
- }
- exit;
- case '/chunked':
- header('Transfer-Encoding: chunked');
- echo "8\r\nSymfony \r\n5\r\nis aw\r\n6\r\nesome!\r\n0\r\n\r\n";
- exit;
- case '/chunked-broken':
- header('Transfer-Encoding: chunked');
- echo "8\r\nSymfony \r\n5\r\nis aw\r\n6\r\ne";
- exit;
- case '/gzip-broken':
- header('Content-Encoding: gzip');
- echo str_repeat('-', 1000);
- exit;
- case '/max-duration':
- ignore_user_abort(false);
- while (true) {
- echo '<1>';
- @ob_flush();
- flush();
- usleep(500);
- }
- exit;
- case '/json':
- header('Content-Type: application/json');
- echo json_encode([
- 'documents' => [
- ['id' => '/json/1'],
- ['id' => '/json/2'],
- ['id' => '/json/3'],
- ],
- ]);
- exit;
- case '/json/1':
- case '/json/2':
- case '/json/3':
- header('Content-Type: application/json');
- echo json_encode([
- 'title' => $vars['REQUEST_URI'],
- ]);
- exit;
- }
- header('Content-Type: application/json', true);
- echo $json;
|