nod32 скрипт для удаленного запуска обновления php + cron

Скрипт запускает на стороннем сервере «обновление антивирусных баз»
и уведомляет на почту только об ошибках и не удачных обновлениях.
Реагирует на прописанные Вами стоп слова, если найдено - отправит на почту все тело документа в виде массива.
Это достаточно удобно если на удаленном сервере отсутствует cron.

Короче...
Для запуска скрипта на удаленном сервере, достаточно запустить у себя кроном (cron) наш скрипт.
Cron:

0 12,18 * * * /usr/bin/php /home/%USERNAME%/www.DOMAIN.ru/cron/runNodUPD.php http://DOMAIN.RU/upd_prog/update.php

1 - адрес нашего скрипта.
2 - адрес удаленного сервера, который в дальнейшем будет парсить данные с этого сайта.
ниже скрипт который мы запускаем.


<?php
//ini_set('display_errors',1); error_reporting(E_ALL | E_STRICT);
$arrUri = $_SERVER['argv']; // консоль
//$arrUri[1] = 'http://DOMAIN.RU/upd_prog/update.php'; // для отладки без консоли 
$stopWords = '/(Error|Can|Bad|Not|Denied|Fatal)/iu'; // реагировать на стоп слова в ответе от сервера nod32, для уведомление на емайл (preg_match)
$mail = 'myMail@domain.ru';
$mailSubject = 'сервер обновлений nod32';

function arrGetResource($uri,$timeOut,$body){
	$ch = curl_init();
	curl_setopt($ch, CURLOPT_URL, $uri);
	curl_setopt($ch, CURLOPT_HEADER, true);
	curl_setopt($ch, CURLOPT_NOBODY, false);
	curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)');
	curl_setopt($ch, CURLOPT_REFERER, 'https://www.google.com');	// если вдруг существует рефер то переназначим его чтоб скрыть откуда скрипт. 
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);  				// возвращать результат работы
	curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 				// не проверять SSL сертификат
	curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); 				// не проверять Host SSL сертификата
	curl_setopt($ch, CURLOPT_HTTPHEADER, array('Expect:')); 		// это необходимо, чтобы cURL не высылал заголовок на ожидание
	curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);   				// переходит по редиректам
	curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 15);   				// секунды попытки соединения
	curl_setopt($ch, CURLOPT_TIMEOUT, $timeOut); 					// максимум выполнение скрипта
	$HeaderResult = curl_exec($ch);
	if($HeaderResult === false) {
		$headers = array('error' => array('code'=>curl_errno($ch),'msg'=>curl_error($ch)));
	} else {
		$headers = array();
		$arrRequests = explode("\r\n\r\n", $HeaderResult); 				// Split the string on every "double" new line.
		for ($index = 0; $index < count($arrRequests) -1; $index++) { 	// Loop of response headers. The "count() -1" is to avoid an empty row for the extra line break before the body of the response.
			foreach (explode("\r\n", $arrRequests[$index]) as $i => $line) {
				if ($i === 0) {
					$headers[$index]['http_code'] = $line;
				} else {
					list ($key, $value) = explode(': ', $line);
					$headers[$index][$key] = $value;
				}
			}
		}
		if(isset($body)) {
			$aHeaderInfo = curl_getinfo($ch);
			$curlHeaderSize=$aHeaderInfo['header_size'];
			$sBody = trim(mb_substr($HeaderResult, $curlHeaderSize));
			$headers[]['content'] = "\n".htmlspecialchars($sBody)."\n";
		}
	}
	curl_close($ch);
	return $headers;
}
if (!filter_var($arrUri[1], FILTER_VALIDATE_URL)) {
	exit('Invalid uri');
}
$hostUrl =  parse_url($arrUri[1], PHP_URL_SCHEME) .'://'. parse_url($arrUri[1], PHP_URL_HOST); // адресс сервера
# проверяем доступность сервера
$arrHeader = arrGetResource(parse_url($arrUri[1],PHP_URL_HOST),10,0);
if(!(isset($arrHeader[0]['http_code']) and preg_match("/^HTTP\/([0-9\.]+) 200 ok$/i",$arrHeader[0]['http_code']))) {
	mail($mail, $mailSubject, "Сервер: ". $hostUrl ." \n Сервер обновления не доступен; \n URI: ".$arrUri[1]." \n Event: ". __file__ .':'. __line__ ." \n\n\n" .var_export($arrHeader,true));
	exit('error:'. __line__ );
}
# запускаем скрипт обновления
$arrHeader = arrGetResource($arrUri[1],55,1);
if(isset($arrHeader[0]['http_code']) and preg_match("/^HTTP\/([0-9\.]+) 200 ok$/i",$arrHeader[0]['http_code'])) {
	if (preg_match($stopWords, $arrHeader[1]['content'], $matches) == 1) {
		mail($mail, $mailSubject, "Сервер: ". $hostUrl ." \n Имеется сообщение об ошибках; \n Отреагированно на: ".$matches[0]."\n URI: ".$arrUri[1]." \n Event: ". __file__ .':'. __line__ ." \n\n\n" .var_export($arrHeader,true));
		exit('error:'. __line__ );
	} else {
		mail($mail, $mailSubject, "Сервер: ". $hostUrl ." - обновлен \n\n" .var_export($arrHeader,true));
		exit("OK! \n returned: \n\n". var_export($arrHeader,true));
	}
} else {
	# http ошибки 500, 403 и д.р. 
	mail($mail, $mailSubject, "Сервер: ". $hostUrl ." \n Скрипт запущен с последствием ошибки или по таймауту; \n URI: ".$arrUri[1]." \n Event: ". __file__ .':'. __line__ ." \n\n\n" .var_export($arrHeader,true));
	exit('error:'. __line__ );
}
?>

Если скрипт рвет соединение раньше минуты то можно попробовать .htaccess файл с содержимым:

# .htaccess
php_value max_execution_time 120
php_value max_input_time 120
nod32 автоотслеживание параметра в реестре при установки антивируса
Контроль раздачи базы данных nod32
Eset nod32 http header
Все о nod32