Здравствуйте, уважаемые.
Взяв и немного подправив скрипт Александра (спасибо

) из этой темы:
http://flapps.ru/forum/topic2052.html , я столкнулся со следующей проблемой. Всё отлично работает, когда получателей меньше 100. Когда же их больше (сейчас в базе более 41к UID'в), я получаю от ВК следующее:
Код: Выделить всё
8 Invalid request: same query repeated too frequently
Как видно из кода, я уже даже поставил sleep (30) после каждой отправки, но это не помогло.
скриптКод: Выделить всё
<?php set_time_limit(0); $uidsForNotice = array(); function flat_array($array) { global $uidsForNotice; foreach ($array as $value) { if(is_array($value)) { $result=array_merge($result,flat_array($value)); } else { if (!(in_array($value, $uidsForNotice))) { $uidsForNotice[] = $value; } } } return $result; } if (isset($_POST['send'])) { require('VkApi.class.php'); include('settings_for_notification.php'); mysql_connect($db_host, $db_user, $db_password) or die (mysql_error()); mysql_select_db($db_name) or die (mysql_error()); function get_url($query) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $query); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_TIMEOUT, 10); return curl_exec($ch); curl_close($ch); } $message = $_POST['mess']; $sql = 'SELECT `iID` FROM `'.$table_name.'`'; $res = @mysql_query($sql) or die("Invalid query: " . mysql_error()); $all = @mysql_num_rows($res); echo 'Всего пользователей: '.$all.'<br />'; echo 'Сообщение: '.$message.'<br /><br />'; $all_send = 0; $api = new VkApiNode($app_id, $api_secret); $totalsent = 0; if ($all > 100) { $kolvo = ceil($all/100); for ($i=0; $i<$kolvo; $i++) { $uids = ''; $sql = 'SELECT `iID` FROM `'.$table_name.'` ORDER BY `iID` LIMIT '.($i*100).','.(100); $res = @mysql_query($sql) or die("Invalid query: " . mysql_error()); $tempuids = array (); while($tempuids[]=mysql_fetch_array($res)){/*umm... do nothing...*/} flat_array ($tempuids); unset($uidsForNotice[count($uidsForNotice)-1]); $query = $api->sendNotification($uidsForNotice, $message); get_url($query); echo '<br /><br />vk возвращает: <br />'; $all_send = get_url($query); echo $all_send; if ($all_send == 0) { echo 'Идёт отправка... Отправлено: 0 / '.$all.'<br />'; } else { $all_send = $all_send + substr_count($uids, ',') + 1; echo 'Идёт отправка... Отправлено: '.$all_send.' / '.$all.'<br />'; } $totalsent += $all_send; flush(); sleep(30); } echo '<br />Отправка завершена. Отправлено: '.($totalsent).' / '.$all.'<br />'; } else { $uids = array(); $tempuids = array (); while($tempuids[]=mysql_fetch_array($res)){/*umm... do nothing...*/} flat_array ($tempuids); unset($uidsForNotice[count($uidsForNotice)-1]); echo '<br /><br />uids after flat_array: <br />'; print_r($uidsForNotice); $uidsStr = ''; foreach ($uidsForNotice as $i) { $uidsStr = $uidsStr.','.$i; } $uidsStr = substr($uidsStr, 1); echo '<br /><br />uids STRING: <br />'; print_r($uidsStr); $query = $api->sendNotification($uidsForNotice, $message); //---- РАБОТАЕТ echo '<br /><br />vk возвращает: <br />'; $all_send = get_url($query); echo $all_send; if ($all_send == 0) { echo 'Отправлено: 0 / '.$all.'<br />'; } else { $all_send = $all_send + substr_count($uids, ',') + 1; echo 'Отправлено: '.$all_send.' / '.$all.'<br />'; } } }else { ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>Отправка уведомлений</title> </head> <body> <h1>Отправка уведомлений</h1> <form method="post"> Текст уведомления (максимум 1024 символа):<br /> <textarea name="mess" cols="50" rows="5"></textarea><br /><br /> <button name="send" type="submit">Отправить</button> </form> </body> </html><? } ?>
Будьте добры, помогите разобраться хотя бы с тем, в чем вообще может быть проблема. Я не прошу готового решения, хотя и не откажусь от него. В гугле ничего не нашел. Также не ничего не нашел помощи в обсуждении этого метода вот здесь:
Обсуждение secure.sendNotification (Алексей Лавров)
Кроме того, через некоторое время работы скрипта получаю еще и это: Request-URI Too Large. С РНР раньше не работал, поэтому понятия не имею, почему такое может возникать. Но с этим еще не разбирался.
С нетерпением жду ответов. Заранее благодарен.