win32_set_service_status

(PECL win32service >=0.1.0)

win32_set_service_statusAtualiza o status do serviço

Descrição

win32_set_service_status(int $status, int $checkpoint = 0): void

Informa ao GCS o status atual de um serviço em execução. Esta chamada só é válida para um processo de serviço em execução.

Cuidado

Desde a versão 0.2.0, esta função funciona somente no SAPI CLI. Em outros SAPI, esta função é desabilitada.

Parâmetros

status

O código de status do serviço, uma das constantes WIN32_SERVICE_RUNNING, WIN32_SERVICE_STOPPED, WIN32_SERVICE_STOP_PENDING, WIN32_SERVICE_START_PENDING, WIN32_SERVICE_CONTINUE_PENDING, WIN32_SERVICE_PAUSE_PENDING ou WIN32_SERVICE_PAUSED.

checkpoint

O valor do ponto de verificação que o serviço incrementa periodicamente para relatar seu progresso durante uma operação demorada de início, parada, pausa ou continuação. Por exemplo, o serviço deve incrementar esse valor à medida que conclui cada etapa de sua inicialização.

O parâmetro checkpoint só é válido quando o parâmetro status for uma das constantes WIN32_SERVICE_STOP_PENDING, WIN32_SERVICE_START_PENDING, WIN32_SERVICE_CONTINUE_PENDING ou WIN32_SERVICE_PAUSE_PENDING.

Valor Retornado

Nenhum valor é retornado.

Antes da versão 1.0.0, retornava WIN32_NO_ERROR em caso de sucesso, false se houver um problema com os parâmetros ou um Código de Erro Win32 em caso de falha.

Erros/Exceções

Antes da versão 1.0.0, se o SAPI não for "cli", esta função emite um erro de nível E_ERROR.

A partir da versão, lança uma exceção Win32ServiceException se o SAPI não for "cli".

Registro de Alterações

Versão Descrição
PECL win32service 1.0.0 Lança uma exceção ValueError em caso de dados inválidos nos parâmetros, anteriormente retornava false.
PECL win32service 1.0.0 Lança uma exceção Win32ServiceException em caso de erro, anteriormente um Código de Erro Win32 era retornado.
PECL win32service 1.0.0 O tipo de retorno agora é void, anteriormente era mixed.
PECL win32service 0.2.0 Esta função funciona apenas no SAPI "cli".

Veja Também

adicione uma nota

Notas Enviadas por Usuários (em inglês) 2 notes

up
2
m dot hald at surfto dot ch
17 years ago
On my Machine (Win XP SP2) the function "win32_get_last_control_message" never returns 4 so i will have to reply to 0 also.finally after mixing several examples i now have a version working woithout filling my event log with errors:<?php/* * PHP SAMPLE TEMPLATE *//* * APP MAIN FUNCTION * Called each second after the function last time finished * Should not take longer than max 20 seconds to execute * ELSE you should call NTServiceResponder(); at least each 20 secs * WARNING: NTServiceResponder will exit; if there was a STOP request */function Service_Main(){    // YOU APPLICATION CODE HERE !!!    sleep(1); // dummy something}/******************************************************************** * * SERVICE CONTROLLING * ********************************************************************/$SERVICE_NAME = "phptestservice";$SERVICE_DISPLAY = "Test Service with PHP";// so u can get: $SERVICE_PATH_PARTS["dirname"] $SERVICE_PATH_PARTS["basename"]  $SERVICE_PATH_PARTS["extension"]$SERVICE_PATH_PARTS = pathinfo(__FILE__);$SERVICE_PARAMS = " run";    if (!isset($argv[1]))    {        die("this application need to be installed as a service.\n run with param install");    }    if ($argv[1] == 'install')    {        $x = win32_create_service(array(                                        'service' => $SERVICE_NAME,                                        'display' => $SERVICE_DISPLAY,                                        'params' =>  __FILE__ . $SERVICE_PARAMS,                                        //'path' =>  $SERVICE_PATH_PARTS["dirname"] . '\php.exe'                                        ));        debug_zval_dump($x);        exit;    }    else if ($argv[1] == 'uninstall')    {        $x = win32_delete_service('dummyphp');        debug_zval_dump($x);        exit;    }    else if ($argv[1] != 'run')    {        die("bogus args, needs to run as service");    }    // Connect to service dispatcher and notify that startup was successful    if (!win32_start_service_ctrl_dispatcher($SERVICE_NAME)) die('Could not connect to service :'.$SERVICE_NAME);    win32_set_service_status(WIN32_SERVICE_RUNNING);    // Main Server Loop    while (1)    {        NTServiceResponder();        // Main script goes here        Service_Main();        sleep(1); // at least 1 sec delay per loop    }    win32_set_service_status(WIN32_SERVICE_STOPPED);/* * Response to NTServiceRequests */function NTServiceResponder(){    switch (win32_get_last_control_message())    {    case 0: // PATCH for: seems never to go to 4 (WIN32_SERVICE_CONTROL_INTERROGATE)        win32_set_service_status(WIN32_SERVICE_RUNNING);        return TRUE;        break;    case WIN32_SERVICE_CONTROL_CONTINUE:        return TRUE; // "Continue"    case WIN32_SERVICE_CONTROL_INTERROGATE:        win32_set_service_status(WIN32_SERVICE_RUNNING);        return TRUE; // 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    }    return FALSE;}?>
up
-1
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 immediatlyset_time_limit(0);ob_implicit_flush();//Server Loopwhile (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 Exitwin32_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'        ";}?>
To Top