Познакомился немножко с питоном, и решил поэкспериментировать с собственным вебсервером в родном пхп.
Вспомнил что работа с сокетами в 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";
}
}