За последние 24 часа нас посетили 22845 программистов и 1264 робота. Сейчас ищут 726 программистов ...

Помогите пожалуйста с оповещениями

Тема в разделе "Сделайте за меня", создана пользователем alizee, 5 янв 2019.

  1. alizee

    alizee Новичок

    С нами с:
    31 май 2018
    Сообщения:
    15
    Симпатии:
    0
    у меня есть long polling
    сам фалй
    PHP:
    1. <?php
    2.  
    3.  
    4. ini_set("display_errors",1);
    5.  
    6.  
    7. $user_id = intval($_SESSION['user_id']);
    8.  
    9.  
    10. header('Content-Type: application/json');
    11.  
    12. define('MOZG', true);
    13. define('ROOT_DIR', __DIR__);
    14. define('ENGINE_DIR', ROOT_DIR.'/core');
    15. define('CONFIG_DIR', ROOT_DIR.'/config');
    16.  
    17.  
    18. if($user_id):
    19.     $cache =  ENGINE_DIR.'/cache/user_'.$user_id.'/updates.tmp';
    20.     $Last_time = isset($_POST['last_time']) ? (int) $_POST['last_time'] : null;
    21.     $data = array();
    22.     if(file_exists($cache)):
    23.         while(true):
    24.             clearstatcache();
    25.             $file_time = filemtime($cache);
    26.             if($Last_time == null):
    27.                     $data['err'] = 1;
    28.                     $data['data'] = null;
    29.                     $data['last_time'] = $file_time;
    30.                     $data['user_id'] = $user_id;
    31.                 break;  
    32.             elseif($file_time > $Last_time):
    33.                     $server_time = intval($_SERVER['REQUEST_TIME']);
    34.                     $update_time = $server_time-70;
    35.                     include ENGINE_DIR.'/classes/mysql.php';
    36.                     include CONFIG_DIR.'/db.php';
    37.                     $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");
    38.                     if($row):
    39.                         $row['text'] = str_replace("|", "&#124;", $row['text']);
    40.                         $res = array(
    41.                             'type' => $row['type'],
    42.                             'name' => $row['user_search_pref'],
    43.                             'from_id' => $row['from_user_id'],
    44.                             'text' => stripslashes($row['text']),
    45.                             'time' => $server_time,
    46.                             'photo' => $row['user_photo'] ? "/uploads/users/{$row['from_user_id']}/50_{$row['user_photo']}" : "/templates/Default/images/no_ava_50.png",
    47.                             'link' => $row['lnk']
    48.                         );
    49.                         $data['data'] = $res;
    50.                         $db->query("DELETE FROM `".PREFIX."_updates` WHERE id = '{$row['id']}'");
    51.                     endif;
    52.                     $data['err'] = 0;
    53.                     $data['last_time'] = $file_time;
    54.                     $data['user_id'] = $user_id;
    55.                 break;
    56.             else:
    57.                 sleep(2);
    58.                 continue;
    59.                 break;
    60.             endif;
    61.         endwhile;
    62.     else:
    63.         file_put_contents($cache, '');
    64.         $file_time = filemtime($cache);
    65.         $data['err'] = 2;
    66.         $data['data'] = null;
    67.         $data['last_time'] = $file_time;
    68.         $data['user_id'] = $user_id;
    69.     endif;
    70. else:
    71.     $data['err'] = 3;
    72.     $data['user_id'] = $user_id;
    73. endif;
    74.     echo json_encode($data);
    75. die();
    76. ?>
    как прецепить

    вот к этим увидомлением пользователю виде +1
    на ходица в index.php

    PHP:
    1. //Новое сообщение
    2. $user_pm_num = $user_info['user_pm_num'];
    3. if($user_pm_num and $user_pm_num != 0 and $user_pm_num != '' and $user_pm_num != null and $user_pm_num != ' ')
    4.     $user_pm_num = "+{$user_pm_num}";
    5. else
    6.     $user_pm_num = '+';
    7.  
    8. СВМ ВЫВОД В html
    9.  
    10. //Сообщения
    11.     if($user_pm_num and $user_pm_num != 0 and $user_pm_num != '' and $user_pm_num != null and $user_pm_num != ' ') {
    12.         $tpl->set('{msg}', $user_pm_num);
    13.         $tpl->set('{msg2}', $user_pm_num);
    14.         $tpl->set('[msg-log]','');
    15.         $tpl->set('[/msg-log]','');
    16.     } else {
    17.         $tpl->set_block("'\\[msg-log\\](.*?)\\[/msg-log\\]'si","");
    18.         $tpl->set('{msg}', '+');
    19.         $tpl->set('{msg2}', '');
    20.     }
     
  2. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.751
    Симпатии:
    1.322
    Адрес:
    Лень
    https://php.net/manual/ru/function.empty.php
     
  3. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.824
    Симпатии:
    736
    Адрес:
    Татарстан
    в каком месте это long pool??

    ИМХО два выхода
    1) Ajax запросы по таймеру - обновление если требуется
    2) более правильный - WebSocket (но тут конечно ws сервер нужно поднимать)