Добрый вечер. Продолжаю крутить свою админку, возник следующий затык - есть скрипт, который получает данные с главной страницы GETом и пингует и парсит хэдер страницы по полученному адресу, тем самым показывая, доступен адрес или нет. Я хочу перенести этот функционал в отдельный скрипт и запускать его по cron-у, дабы он автоматически пинговал все площадки и записывал их состояние в БД. Вот здесь собственно и затык - как одному скрипту взять весь массив айпишников, каждый проверить, и обновить запись по каждому айпишнику в БД? Селектом выбираю поля Id(уникальный идентификатор), IP (собственно адрес) и State(имеет значения 0, 1, 2 или пока пустой(площадка ни разу не проверялась)).
Ниже код первой части, что смог скомпилить из всего что знаю.
<?php
// Коннектимся к БД
include 'connect.php';
// подключаемся к базе данных
mysql_select_db($db_name, $connect_to_db)
or die("Could not select DB: " . mysql_error());
mysql_query("SET NAMES 'utf8'");
mysql_query("SET CHARACTER SET 'utf8'");
mysql_query("SET SESSION collation_connection = 'utf8_general_ci'");
$qr_result = mysql_query("select `Id`, `IP`, `State` from `table4`")
or die(mysql_error());
//объявляем переменные
$data = mysql_fetch_array($qr_result);
$ip=$data['IP'];
if (!preg_match('/^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}/',$ip)) {echo "Sorry, wrong request"; exit;}//проверка на правильность записи
preg_match('/^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}/',"$ip", $matches);//удаление порта, если есть
$ip2=$matches[0];
$ch = curl_init( $ip );
$options = array(
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HEADER => true,
CURLOPT_CONNECTTIMEOUT => 10,
CURLOPT_TIMEOUT => 10,
CURLOPT_NOBODY => 1
);
curl_setopt_array( $ch, $options );
curl_exec($ch);
$http = curl_getinfo($ch);
curl_close($ch);
exec("ping -c 1 -w 10 $ip2",$output, $status);
IT`S ALIVE!!!
Я не ожидал что заработает с первого раза(исключая пару косяков в виде забытой скобочки или знака вопроса в последней строке кода), но заработало!
<?php
// Коннектимся к БД
include 'connect.php';
// подключаемся к базе данных
mysql_select_db($db_name, $connect_to_db)
or die("Could not select DB: " . mysql_error());
mysql_query("SET NAMES 'utf8'");
mysql_query("SET CHARACTER SET 'utf8'");
mysql_query("SET SESSION collation_connection = 'utf8_general_ci'");
$qr_result = mysql_query("select `Id`, `IP`, `State` from `table4`")
or die(mysql_error());
//объявляем переменные
while ($data = mysql_fetch_array($qr_result)){
$ip=$data['IP'];
$id=$data['Id'];
$state=$data['State']}
if (!preg_match('/^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}/',$ip)) {echo "Sorry, wrong request"; exit;}//проверка на правильность записи
preg_match('/^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}/',"$ip", $matches);//удаление порта, если есть
$ip2=$matches[0];
$ch = curl_init( $ip );
$options = array(
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HEADER => true,
CURLOPT_CONNECTTIMEOUT => 10,
CURLOPT_TIMEOUT => 10,
CURLOPT_NOBODY => 1
);
curl_setopt_array( $ch, $options );
curl_exec($ch);
$http = curl_getinfo($ch);
curl_close($ch);
exec("ping -c 1 -w 10 $ip2",$output, $status);
if ($http['http_code']=="200" and $status==0)
{$state="0";}
elseif ($http['http_code']=="200" and $status!=0)
{$state="0";}
elseif ($http['http_code']!="200" and $status==0)
{$state="1";}
else
{$state="2";}
mysql_query("UPDATE `table4` SET `State` =$state WHERE `Id` =$id");
};
?>