-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathserve.php
More file actions
68 lines (49 loc) · 2.23 KB
/
serve.php
File metadata and controls
68 lines (49 loc) · 2.23 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
<?php
$ip = '127.0.0.1';
$port = 8080;
if(($sock = socket_create(AF_INET,SOCK_STREAM,SOL_TCP)) < 0) {
echo "socket_create() 失败的原因是:".socket_strerror($sock)."\n";
}
if(($ret = socket_bind($sock,$ip,$port)) < 0) {
echo "socket_bind() 失败的原因是:".socket_strerror($ret)."\n";
}
if(($ret = socket_listen($sock,4)) < 0) {
echo "socket_listen() 失败的原因是:".socket_strerror($ret)."\n";
}
while(true) {
if (($msgsock = socket_accept($sock)) < 0) {
echo "socket_accept() 失败的原因是:" . socket_strerror($msgsock) . "\n";
break;
} else {
$buf = socket_read($msgsock,8192);
$REQUEST_URI = explode(" ",explode("\r\n", $buf)[0])[1];
if($REQUEST_URI == "/"){
$SCRIPT_NAME = "/index.php";
} else {
$requestStringTmp = explode("?",$REQUEST_URI);
$SCRIPT_NAME = $requestStringTmp[0];
$QUERY_STRING = count($requestStringTmp) > 1 ? $requestStringTmp[1] : '';
}
if(file_exists('./htdocs/'.$SCRIPT_NAME)){
if (strpos($SCRIPT_NAME, ".php")>0) {
putenv("SERVER_PROTOCOL=HTTP/1.1");
putenv("GATEWAY_INTERFACE=CGI/1.1");
putenv("REQUEST_URI=$REQUEST_URI");
putenv("SCRIPT_NAME=$SCRIPT_NAME");
putenv("SCRIPT_FILENAME=./htdocs/$SCRIPT_NAME");
putenv("QUERY_STRING=$QUERY_STRING");
exec("php-cgi",$content);
$content = implode("\n", $content);
$msg = "HTTP/1.1 200 OK\r\nConnection: Keep-Alive\r\n".$content;
} else {
$content = file_get_contents('./htdocs/'.$SCRIPT_NAME);
$msg = "HTTP/1.1 200 OK\r\nContent-type: ".mime_content_type('./htdocs/'.$REQUEST_URI)."; charset=UTF-8\r\nConnection: Keep-Alive\r\nServer: phpHttpd/1.0.0\r\n\r\n".$content;
}
socket_write($msgsock, $msg, strlen($msg));
} else {
$msg = "HTTP/1.1 404 Not Found\r\nContent-type: text/html; charset=UTF-8\r\nConnection: Keep-Alive\r\nServer: phpHttpd/1.0.0\r\n\r\n Not Found: ".$SCRIPT_NAME;
socket_write($msgsock, $msg, strlen($msg));
}
}
}
socket_close($sock);