$base_dir="/opt/etc/sendsms/"; function is_in_contact_list($list, $number) { for($i = 0; $i < count($list["group"]); $i++) { if (isset($list["group"][$i]["contacts"])) for ($j = 0;$j < count($list["group"][$i]["contacts"]); $j++) { if (strcmp((string)$list["group"][$i]["contacts"][$j]["phone"], (string)$number) == 0) return true; } } foreach ($list["unknown"] as $cnum => $contact) { if (strcmp((string)$contact["phone"], (string)$number) == 0) return true; } return false; } $phone = $argv[1]; $message = ""; for($i = 2; $i < count($argv); $i++) $message .= $argv[$i]." "; $message = substr($message, 0, strlen($message) - 1); set_time_limit(0); //устанавливаем тайм лимит на ноль $fp = fopen($base_dir."login.txt", "r"); //считываем старый номер логина $login_num = fread($fp, 10); //считаем и записываем новый fclose($fp); if($login_num == (count($login) - 1)) $login_num = 0; else $login_num++; $fp = fopen($base_dir."login.txt", "w"); fwrite($fp, $login_num); fclose($fp); if($phone[0] == "+") $phone = substr($phone, 1, strlen($phone) - 1); //обрезаем плюс если есть. include_once("class.mrim.php"); //подключаем описание класса $mrim = new mrim; //создаем объект $mrim->connect() or die("connection error"); //соединяемся $mrim->login($login[$login_num], $pass[$login_num]) or die("login error"); //Логинимся, с очередным паролем sleep(1); // Поспим секундочку =) $mrim->ping(); //пингуемся $mrim->set_status("online"); // online, away, invisible $time = time(); // Это нужно для дальнейшего удержания соединения $send = false; //смс сообщение еще не отправлено $i = 0; //количество полученных пакетов. На случай если что-то пойдет не так, скрипт выйдет после 500 полученных пакетов while($mrim->is_connected() && !$send) //пока не вылетели и не отправили сообщение { $i++; //получен пакет // Следующие 6 строк нужны для удержания соединения с сервером if(time() >= $time + $mrim->ping_time) { $mrim->ping(); $time = time(); } $packet = $mrim->receive_packet(); $mrim->is_new_ping($packet); // Действия if($list = $mrim->is_contact_list($packet)) //если прислали контакт лист { if(is_in_contact_list($list,$phone)) //контакт найден в списке, отправляем смску { $mrim->sms((string)("+".$phone),$message); $send = true; } else //не найден, добавляем $mrim->add_contact("phone", $phone, "text O.o", $phone, 1000003,false,false,false,false,false,true);// - добавить контакт в список. bool флаги говорят за себя. text - сообщение запроса авторизации. По умолчанию равно стандартному. } if($add_result = $mrim->is_add_result($packet)) //если прислали результат добавления контакта { if((int)$add_result == $add_result) //то отправляем смс, проверяя чтобы пришла либо цифра либо true { $mrim->sms((string)("+".$phone), $message); $send = true; } } //если за 500 пакетов (примерно 4,5 минуты) ничего не произошло, то выходим. Пишем ошибку, но на всякий пожарный пытаемся отправить, попытка, как говорится не пытка. if($i > 500) { $mrim->sms((string)("+".$phone), $message); $send = true; echo "contact list not send. Sms send Error.\n"; } //чтобы не повесить сервер usleep(500); } ?>