【发布时间】:2012-07-10 05:55:27
【问题描述】:
我刚试过这段代码:
<?php
set_time_limit(0);
$address = '176.9.117.136';
$port = 9000;
$sock = socket_create(AF_INET, SOCK_STREAM, 0);
socket_bind($sock, $address, $port) or die('Could not bind to address');
while(1)
{
socket_listen($sock);
$client = socket_accept($sock);
$input = socket_read($client, 1024);
echo $input;
$output = 'URL: http://ip-of-my-server:9000/
HTTP/1.1 200 OK
Date: Tue, 10 Jul 2012 16:58:23 GMT
Server: TestServer/1.0.0 (PHPServ)
Last-Modified: Fri, 06 Jul 2012 14:29:58 GMT
ETag: "13c008e-1b9-4c42a193de580"
Accept-Ranges: bytes
Content-Length: 441
Vary: Accept-Encoding
Content-Type: text/html
';
socket_write($client, $output);
socket_close($client);
}
socket_close($sock);
?>
但是有一个问题。 Apache 不使用 $output 的内容作为标头,而是返回自己的标头...
我不知道为什么,因为我通过这个命令执行脚本:php webserv.php。
但它实际上是有效的,因为当我从浏览器加载页面http://ip-of-my-server:9000/ 时,它会向我显示客户端在服务器上发送的标头,并将$output 的内容返回给客户端(我的浏览器)。
如果可能的话,我想只在 PHP 中创建自己的网络服务器。我只是想知道如何在没有 Apache 的情况下运行它,这样我就可以管理自己的 HTTP 标头。
【问题讨论】:
-
以防万一你不知道,PHP5.4 附带一个内置的 Web 服务器,所以你不必做这种事情......
-
这似乎是在重新发明轮子。我向你保证,那里有很多轮子。
-
rdlowrey:我知道,是的。 Wug:这只是为了学习......我永远不会将它用作生产网络服务器。我只想创建我自己的,以了解它是如何从 A 到 Z 工作的。
-
您是否有在同一台机器上运行的 apache 实例?您可能想尝试禁用它并重试...
-
有Nanoweb,还有PEARs HTTP_Server供参考。
标签: php apache http sockets webserver