Created
July 6, 2016 16:19
-
-
Save forthxu/617ee910381a0cb69630bf8a268e43a2 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
//http://blog.codinglabs.org/articles/write-daemon-with-php.html | |
//Accpet the http client request and generate response content. | |
//As a demo, this function just send "PHP HTTP Server" to client. | |
function handle_http_request($address, $port) | |
{ | |
$max_backlog = 16; | |
$res_content = "HTTP/1.1 200 OK | |
Content-Length: 15 | |
Content-Type: text/plain; charset=UTF-8 | |
PHP HTTP Server"; | |
$res_len = strlen($res_content); | |
//Create, bind and listen to socket | |
if(($socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) === FALSE) | |
{ | |
echo "Create socket failed!\n"; | |
exit; | |
} | |
if((socket_bind($socket, $address, $port)) === FALSE) | |
{ | |
echo "Bind socket failed!\n"; | |
exit; | |
} | |
if((socket_listen($socket, $max_backlog)) === FALSE) | |
{ | |
echo "Listen to socket failed!\n"; | |
exit; | |
} | |
//Loop | |
while(TRUE) | |
{ | |
if(($accept_socket = socket_accept($socket)) === FALSE) | |
{ | |
continue; | |
} | |
else | |
{ | |
socket_write($accept_socket, $res_content, $res_len); | |
socket_close($accept_socket); | |
} | |
} | |
} | |
//Run as daemon process. | |
function run() | |
{ | |
if(($pid1 = pcntl_fork()) === 0) | |
//First child process | |
{ | |
posix_setsid(); //Set first child process as the session leader. | |
if(($pid2 = pcntl_fork()) === 0) | |
//Second child process, which run as daemon. | |
{ | |
//Replaced with your own domain or address. | |
handle_http_request('www.codinglabs.org', 9999); | |
} | |
else | |
{ | |
//First child process exit; | |
exit; | |
} | |
} | |
else | |
{ | |
//Wait for first child process exit; | |
pcntl_wait($status); | |
} | |
} | |
//Entry point. | |
run(); | |
?> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment