RUNET
Новичок
php демон...проблемка...
Собственно столкнулся со странной проблемой.
написан простейший демон
задача: управлять процессами винды (запустить, остановить).
для этого к пхп был прикручен модуль win32service.
Так вот, проблема вот в чем.
при вызове функции win32_stop_service() демон отваливается, но процесс останавливает.
p.s. при вызове win32_start_service() все работает отлично (пробывал даже 10 раз подрят поднимать процесс, все ок.
пробывал с другим модулем по управлению процессами, те же яйца вид с боку....
собсно сам демон
Собственно столкнулся со странной проблемой.
написан простейший демон
задача: управлять процессами винды (запустить, остановить).
для этого к пхп был прикручен модуль win32service.
Так вот, проблема вот в чем.
при вызове функции win32_stop_service() демон отваливается, но процесс останавливает.
p.s. при вызове win32_start_service() все работает отлично (пробывал даже 10 раз подрят поднимать процесс, все ок.
пробывал с другим модулем по управлению процессами, те же яйца вид с боку....
собсно сам демон
PHP:
<?php
// Работаем вечно (выдаёт ошибку при safe_mode=1, @ для подавления)
@set_time_limit(0);
// Создание сокета TCP: resource socket_create(1, 2, 3);
// 1) AF_INET - семейство протокола или домен. Для соединений
// осуществляемых через интернет используется AF_INET,
// для UNIX используется AF_Unix (но об этом позже)
// 2) SOCK_STREAM - обычно используется для TCP (SOCK_DGRAM - UDP)
// 3) Протокол для TCP - SOL_TCP, UDP - SOL_UDP
// возвращает дескриптор сокета
if(($socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) < 0)
{
print("Невозможно создать сокет: " .
socket_strerror(socket_last_error()) . "\n");
}
// Биндим сокет на определённый адрес и порт: boolean socket_bind(1, 2, 3);
// 1) Дескриптор сокета
// 2) IP адрес, или путь до сокета в Unix
// 3) Порт (в нашем случае порт = 666)
if(($error = socket_bind($socket, "127.0.0.1", 666)) < 0)
{
print("Невозможно привязать сокет :" .
socket_strerror(socket_last_error()). "\n");
}
// Прослушиваем сокет: boolean socket_listen(1, 2);
// 1) дескриптор сокета
// backlog размер очереди запрросов ожидающих соединения
if(($error = socket_listen($socket, 5)) < 0)
{
print("Невозможно прослушать сокет: " .
socket_strerror(socket_last_error()) . "\n");
}
// Слушаем вечно ;)
while(TRUE)
{
// ожидаем соединение
// socket_accept(дескрипток сокета) - принимает входящие соединение и делает на скрипт сервером.
if(($accept = socket_accept($socket)) < 0)
{
print("Ошибка при чтении: " .
socket_strerror($message) . "\n");
break;
}
// юзер подключился
print(date("Y-m-d H:i:s", time())." STATUS: client connected.\n");
@ob_flush();
while(TRUE)
{
// Считываем заданное количество байт из указанного сокета
if(FALSE === ($line = @socket_read($accept, 2048)))
{
print("Невозможно прослушать сокет: " .
socket_strerror(socket_last_error()) . "\n");
break 2;
}
list($case, $serv) = explode("|",$line);
switch(strtolower(trim($case)))
{
case "bye" :
print(date("Y-m-d H:i:s", time())." STATUS: client close connection.\n");
break 2;
break;
case "uninstall" :
win32_stop_service($serv);
$test = "Сервер успешно $case.";
// записываем данные из буфера в сокет
if(!@socket_write($accept, "$test"))
{
print(date("Y-m-d H:i:s", time())." STATUS: client close connection.\n");
break 2;
}
break;
case "install" :
win32_start_service($serv);
$test = "Сервер успешно $case.";
// записываем данные из буфера в сокет
if(!@socket_write($accept, "$test"))
{
print(date("Y-m-d H:i:s", time())." STATUS: client close connection.\n");
break 2;
}
break;
}
print(date("Y-m-d H:i:s", time()). " COMMAND: ".$case." service $serv\n");
@ob_flush();
}
// закрываем соединение
socket_close($accept);
}
// Закрываем сокет
socket_close($socket);
?>