stream_socket_server — не работают http_headers

Познакомился немножко с питоном, и решил поэкспериментировать с собственным вебсервером в родном пхп.
Вспомнил что работа с сокетами в 5.х пхп является доступной по умолчанию.
Простого HelloWorld для http я не нашел, но в документации был пример для https.
Я его урезал, и запустил (на виндовой машине).
В результате получил в браузер ответ (УРА!). Но ответ неверный.
Все заголовки оказались в теле.
Просмотр заголовков показал что в начале выводится два перевода строки которые и воспринимаются как окончание блока заголовка. Что я делаю не так?
<?php
// Hello World! HTTP Server.
// Create the server socket
$server = stream_socket_server('tcp://localhost:9999', $errno, $errstr, STREAM_SERVER_BIND|STREAM_SERVER_LISTEN);
while(true)
{
    $buffer = '';
    print "waiting...";
    $client = stream_socket_accept($server);
    print "accepted " . stream_socket_get_name( $client, true) . "\n";
    if( $client )
    {
        // Read until double CRLF
        while( !preg_match('/\r?\n\r?\n/', $buffer) )
            $buffer .= fread($client, 2046); 
        // Respond to client
        fwrite($client,  "200 OK HTTP/1.1\r\n"
                         . "Connection: close\r\n"
                         . "Content-Type: text/html\r\n"
                         . "\r\n"
                         . "Hello World! " . microtime(true)
                         . "<pre>{$buffer}</pre>");
        fclose($client);
    } else {
        print "error.\n";
    }
}
  • Вопрос задан
  • 2926 просмотров
Решения вопроса 1
Mendel
@Mendel Автор вопроса
PHP-developer
Подсказали на другом форуме:
fwrite($client,  "200 OK HTTP/1.1\r\n" 

Замени на
fwrite($client,  "HTTP/1.1 200 OK\r\n"  

Забавно оказалось.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы