Voting

: max(nine, one)?
(Example: nine)

The Note You're Voting On

paul_nelson57071 at yahoo dot com
15 years ago
So after much searching I finally found all the peices to make a working windows service & server including:
- Installing & Uninstalling the service
- Starting & Stopping the Service
- Actually running a basic Server
- Responding to windows Service to Stop/Start/Restart

I hope you find this useful! I did this using PHP 5.2 and the PECL library for 5.2 (PHP 5.3 at the time does not have a PECL Library compiled for it)

<?php
//Service Settings
$Service = 'MyServiceFinal';
$Display = 'My PHP Service';

//Server Settings
$host = '127.0.0.1'; //Bind to IP #
$port = 23; //On port #
$max = 20; //Maximum Clients


//Exit if no start-up argument is passed
if (!isset($argv[1])){ShowHelp(); exit;}

//Create Windows Service
if ($argv[1] == 'install') {
$x = win32_create_service(array(
'service' => $Service,
'display' => $Service,
'params' => __file__ . ' run',
'path' => 'c:\\php\\php.exe',
));
debug_zval_dump($x);
echo
"Service Installed\n\n";
exit;

//Remove Windows Service
} else if ($argv[1] == 'uninstall') {
$x = win32_delete_service($Service);
debug_zval_dump($x);
echo
"Service Removed\n\n";
exit;

//Start Windows Service
} elseif($argv[1] == "start") {
$x = win32_start_service($Service);
debug_zval_dump($x);
echo
"Service Started\n\n";
exit;

//Stop Windows Service
} elseif($argv[1] == "stop") {
$x = win32_stop_service($Service);
debug_zval_dump($x);
echo
"Service Stopped\n\n";
exit;

//Unkown Command
} else if ($argv[1] != 'run') {
ShowHelp(); exit();
}

//Tell windows the service has started...
if (!win32_start_service_ctrl_dispatcher($Service)) die("Could not connect to service : $Service");
win32_set_service_status(WIN32_SERVICE_RUNNING);

// No timeouts, flush content immediatly
set_time_limit(0);
ob_implicit_flush();

//Server Loop
while (1) {
usleep(500);

//Handle Windows Service Request
switch (win32_get_last_control_message()) {
case
WIN32_SERVICE_CONTROL_CONTINUE: break; // Continue server routine
case WIN32_SERVICE_CONTROL_INTERROGATE: win32_set_service_status(WIN32_NO_ERROR); break; // Respond with status
case WIN32_SERVICE_CONTROL_STOP: win32_set_service_status(WIN32_SERVICE_STOPPED); exit; // Terminate script
default: win32_set_service_status(WIN32_ERROR_CALL_NOT_IMPLEMENTED); // Add more cases to handle other service calls
}
//Acutal Server Code

}

//Clean up and Exit
win32_set_service_status(WIN32_SERVICE_STOPPED);
exit;

//*************** FUNCTIONS ***************
function ShowHelp(){
echo
"Usage:
install:\t installs servce
uninstall:\t deletes service
start:\t\t Start the windows service
stop:\t\t Stops the windows service
run:\t\t called by CMS to run the service

For information on code numbers type 'net helpmsg xxxx'
EXAMPEL: 'net helpmsg 1072'

"
;
}
?>

<< Back to user notes page

To Top