Программное обеспечение сервера.
Эта статья предназначена для всех желающих организовать или расширить свой бизнес, в области дистанционного наблюдения за подвижными или стационарными объектами, т.е. создать собственный Центр Слежения.
В документе "Описание изделия", который Вы легко можете скачать здесь, подробно описано, какие данные SpyWatcher может передавать на сервер и в каком формате они представлены. Неизвестным осталось только имя принимающей (на сервере) программы (в документации оно обозначено, как xx.php).
Мы не можем открыть, как называеся эта программа на нашем сервере (поэтому и обозначили ее xx), чтобы никто не смог напихать в нашу базу данных кучу всякого мусора.
При отправке данных на сервер, SpyWatcher будет указывать имя принимающей программы, которое Вы ему сообщите командой: SR <имя>. Имя не длиннее 2-х допустимых символов без «.php». Команда подается один раз, для каждого SpyWatcher-а, который Вы продаете.
Допустим, что у Вас на сервере в базе данных (my_base) создана таблица (my_tab), содержащая следующие поля:
- id (varchar(16)) - номер телефона или имя SpyWatcher-а;
- dat (varchar(2)) - номер внешнего устройства;
- coord (varchar(17)) - координаты;
- speed (int(4)) - скорость объекта;
- time (varchar(6)) - время по UTC;
- color (varchar(1)) - цвет точки на экране монитора;
- unit (varchar(2)) - номер внешнего устройства, сгенерировавшего событие;
- stime (varchar(6)) - время сервера;
- sdate (varchar(8)) - дата сервера.
Тогда программа xx.php должна иметь, примерно, следующий вид:
$dblocation = "localhost"; // Имя сервера
$dbuser = "Anton"; // Имя пользователя
$dbpasswd = "parol"; // Пароль
$dbname = "my_base"; // Имя базы данных
$dbconn = @mysql_connect($dblocation,$dbuser,$dbpasswd);
mysql_query('SET NAMES cp1251', $dbconn);
if ($dbconn) // Если дескриптор равен 0 соединение не установлено
{
if (@mysql_select_db($dbname, $dbconn))
{
$text = $_GET['string']; //Читаем блок данных, которые передал SpyWatcher по GPRS
$ckl = 0; //Cчетчик циклов
$st = strtok($text, ';'); //Сообщения в блоке разделены символом "точка с запятой"
while ($st) //выделяем их. Всего их может быть от 1 до 12
{
$ckl = $ckl +1;
if ($ckl > 1) $st = $swname." ".$st; //Имя SpyWatcher-а есть только в первом сообщении блока
$ar = explode(" ", $st); //Разделяем содержимое сообщения по пробелам (он всегда только один)
if ($ckl == 1) $swname = $ar[0]; //Запомним имя передающего, оно, только в первом сообщении
// Проверяем входящие данные: Имя должно начинаться со знака «+»
// и не должно быть +Noname (т.е. незадано). Можно проверить имя по отдельной базе, как хотите.
// Лучше, вместо имени использовать номер телефона.
// Проверяем координаты, если они нулевые - в базу не пишем, если не Северная или не Южная Широта
// а какой-то спам - пропускаем
if ($ar[1]=='0' and substr($ar[0],0,1) == '+' and $ar[0]!='+Noname' and
(substr($ar[2],7,1) == 'N' or substr($ar[2],7,1) == 'S') and substr($ar[2],0,7) != '0000000')
{
$stime = date("His"); // server time
$sdate = date("dmY"); // server date: 21102010
$qu = "INSERT INTO `tracks`(`id`,`dat`,`coord`,`speed`,`time`,`color`,`unit`,`stime`,`sdate`)
VALUES ('$ar[0]','$ar[1]','$ar[2]','$ar[3]','$ar[4]','$ar[5]','$ar[6]','$stime','$sdate')";
@mysql_query($qu);
}
$st = strtok(';');
}
@mysql_close($dbconn);
}
}
Назад Другие статьи