у меня есть long polling сам фалй PHP: <?php ini_set("display_errors",1); error_reporting(E_ALL); set_time_limit(900); session_start(); $user_id = intval($_SESSION['user_id']); session_write_close(); header('Content-Type: application/json'); define('MOZG', true); define('ROOT_DIR', __DIR__); define('ENGINE_DIR', ROOT_DIR.'/core'); define('CONFIG_DIR', ROOT_DIR.'/config'); if($user_id): $cache = ENGINE_DIR.'/cache/user_'.$user_id.'/updates.tmp'; $Last_time = isset($_POST['last_time']) ? (int) $_POST['last_time'] : null; $data = array(); if(file_exists($cache)): while(true): clearstatcache(); $file_time = filemtime($cache); if($Last_time == null): $data['err'] = 1; $data['data'] = null; $data['last_time'] = $file_time; $data['user_id'] = $user_id; break; elseif($file_time > $Last_time): $server_time = intval($_SERVER['REQUEST_TIME']); $update_time = $server_time-70; include ENGINE_DIR.'/classes/mysql.php'; include CONFIG_DIR.'/db.php'; $row = $db->super_query("SELECT id, type, from_user_id, text, lnk, user_search_pref, user_photo FROM `".PREFIX."_updates` WHERE for_user_id = '{$user_id}' AND date > '{$update_time}' ORDER by `date` ASC"); if($row): $row['text'] = str_replace("|", "|", $row['text']); $res = array( 'type' => $row['type'], 'name' => $row['user_search_pref'], 'from_id' => $row['from_user_id'], 'text' => stripslashes($row['text']), 'time' => $server_time, 'photo' => $row['user_photo'] ? "/uploads/users/{$row['from_user_id']}/50_{$row['user_photo']}" : "/templates/Default/images/no_ava_50.png", 'link' => $row['lnk'] ); $data['data'] = $res; $db->query("DELETE FROM `".PREFIX."_updates` WHERE id = '{$row['id']}'"); endif; $data['err'] = 0; $data['last_time'] = $file_time; $data['user_id'] = $user_id; break; else: sleep(2); continue; break; endif; endwhile; else: file_put_contents($cache, ''); $file_time = filemtime($cache); $data['err'] = 2; $data['data'] = null; $data['last_time'] = $file_time; $data['user_id'] = $user_id; endif; else: $data['err'] = 3; $data['user_id'] = $user_id; endif; echo json_encode($data); die(); ?> как прецепить вот к этим увидомлением пользователю виде +1 на ходица в index.php PHP: //Новое сообщение $user_pm_num = $user_info['user_pm_num']; if($user_pm_num and $user_pm_num != 0 and $user_pm_num != '' and $user_pm_num != null and $user_pm_num != ' ') $user_pm_num = "+{$user_pm_num}"; else $user_pm_num = '+'; СВМ ВЫВОД В html //Сообщения if($user_pm_num and $user_pm_num != 0 and $user_pm_num != '' and $user_pm_num != null and $user_pm_num != ' ') { $tpl->set('{msg}', $user_pm_num); $tpl->set('{msg2}', $user_pm_num); $tpl->set('[msg-log]',''); $tpl->set('[/msg-log]',''); } else { $tpl->set_block("'\\[msg-log\\](.*?)\\[/msg-log\\]'si",""); $tpl->set('{msg}', '+'); $tpl->set('{msg2}', ''); }
в каком месте это long pool?? ИМХО два выхода 1) Ajax запросы по таймеру - обновление если требуется 2) более правильный - WebSocket (но тут конечно ws сервер нужно поднимать)