fork download
  1. <?php
  2.  
  3. $address = '127.0.0.1';
  4. $port = 1337;
  5.  
  6. if (($sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) === false) {
  7. echo "Не удалось создать сокет, причина: " . socket_strerror(socket_last_error()) . "\n";
  8. die;
  9. }
  10.  
  11. if (socket_bind($sock, $address, $port) === false) {
  12. echo "Не удалось привязать сокет к адрресу, причина: " . socket_strerror(socket_last_error()) . "\n";
  13. die;
  14. }
  15.  
  16. if (socket_listen($sock, 5) === false) {
  17. echo "Не удалось выполнить socket_listen(): причина: " . socket_strerror(socket_last_error($sock)) . "\n";
  18. die;
  19. }
  20.  
  21. do {
  22. if (($msgsock = socket_accept($sock)) === false) {
  23. echo "Не удалось выполнить socket_accept(): причина: " . socket_last_error($sock) . "\n";
  24. continue;
  25. }
  26.  
  27. $request = "";
  28.  
  29. while (is_string($read = socket_read($msgsock, 1024))) {
  30. if($read == "") break;
  31.  
  32. $request .= $read;
  33.  
  34. if (preg_match("/\r\n\r\n/", $request)) {
  35. $request = implode("<br>", preg_split("/\r\n/", $request));
  36. break;
  37. }
  38. }
  39.  
  40. if ($read === false) {
  41. echo "ошибка чтения из сокета, причина: " . socket_last_error($msgsock) . "\n";
  42. }
  43.  
  44. $response = "HTTP/1.1 200 Ok\r\n";
  45. $response .= "Content-Type: text/html; charset=UTF-8\r\n\r\n";
  46. $response .= "<!DOCTYPE html><html><head></head><body>$request</body></html>";
  47.  
  48. socketWrite($msgsock, $response);
  49. } while (true);
  50.  
  51. socket_close($sock);
  52.  
  53. function socketWrite($msgsock, $buffer) {
  54. $length = strlen($buffer);
  55.  
  56. while ($bytesSent = socket_write($msgsock, $buffer)) {
  57. if ($bytesSent == $length) {
  58. echo "all bytes have been sent \n";
  59. socket_close($msgsock);
  60. break;
  61. } else {
  62. $buffer = substr($buffer, $bytesSent);
  63. }
  64. }
  65.  
  66. if ($bytesSent === false) {
  67. echo "Не удалось записать данные в сокет, причина:" . socket_strerror(socket_last_error());
  68. socket_close($msgsock);
  69. }
  70. }
Time limit exceeded #stdin #stdout 5s 61648KB
stdin
Standard input is empty
stdout
Standard output is empty