Загрузка...

Отправка формы ТГ об всей информации пользователя сайта

Тема в разделе Backend создана пользователем feefef 17 янв 2023. 343 просмотра

Загрузка...
  1. feefef
    feefef Автор темы 17 янв 2023 3 6 май 2019
    написал простенький php скрипт отправки формы информации юзера, такие как:
    1. Ip
    2. Страна
    3. ОС (user-agent)
    Как выглядит:

    [IMG]

    Для работы укажите Ваш бот токен и юзер айди
    Сам код: [IMG]
    PHP
    <?php


    $client = @$_SERVER['HTTP_CLIENT_IP'];
    $forward = @$_SERVER['HTTP_X_FORWARDED_FOR'];
    $remote = @$_SERVER['REMOTE_ADDR'];
    $agent = $_SERVER["HTTP_USER_AGENT"];

    if( preg_match('/MSIE (\d+\.\d+);/', $agent) ) {
    echo "You're using Internet Explorer";
    } else if (preg_match('/Chrome[\/\s](\d+\.\d+)/', $agent) ) {
    echo "You're using Chrome";
    } else if (preg_match('/Edge\/\d+/', $agent) ) {
    echo "You're using Edge";
    } else if ( preg_match('/Firefox[\/\s](\d+\.\d+)/', $agent) ) {
    echo "You're using Firefox";
    } else if ( preg_match('/OPR[\/\s](\d+\.\d+)/', $agent) ) {
    echo "You're using Opera";
    } else if (preg_match('/Safari[\/\s](\d+\.\d+)/', $agent) ) {
    echo "You're using Safari";
    }

    if(filter_var($client, FILTER_VALIDATE_IP)) $ip = $client;
    elseif(filter_var($forward, FILTER_VALIDATE_IP)) $ip = $forward;
    else $ip = $remote;

    $res = file_get_contents('https://www.iplocate.io/api/lookup/'.$ip);
    $res = json_decode($res);

    echo $res->country; // United States
    echo $res->continent; // North America
    echo $res->latitude; // 37.751
    echo $res->longitude; // -97.822



    $token = "";
    $chat_id = "";
    $arr = array(
    '⚠Нажатие на Download ⚠' => '',
    'Ip: ' => $ip,
    'Страна: ' => $res->country,
    '⚙OC: ' => $agent
    );

    foreach($arr as $key => $value) {
    $txt .= "<b>".$key."</b> ".$value."%0A";
    };

    $sendToTelegram = fopen("https://api.telegram.org/bot{$token}/sendMessage?chat_id={$chat_id}&parse_mode=html&text={$txt}","r");

    if ($sendToTelegram && $sendToTelegram2) {
    header('Location: thanks.html');
    } else {
    echo "Error";
    }
    ?>
     
  2. kennnnnu
    kennnnnu 18 янв 2023 4 15 янв 2020
    Хотелось бы прокомментировать и дать некоторые советы:

    1. Слишком много регулярных выражений, было бы правильно использовать str_contains.
    2. iplocate и подобные ему аналоги имеют лимит запросов, т.е. скрипт сдохнет при большой посещаемости. Используй geodb.
    3. Выражения по типу $foo->bar (при работе с json) имеют плохую производительность, поэтому декодируй json с использованием второго аргумента, а именно json_decode($res, true) (использовать так - $res['country'])
    4. После символа } точка с запятой никогда не ставится.
    5. fopen не может использоваться для работы с API телеги, используй cURL или на крайняк file_get_contents.
    6. Переменная sendToTelegram2 не существует - ошибка.
    7. В конце php кода, если там же нет HTML кода, закрывающий тег (?>) не нужен.

    А так, в целом, очень хорошее решение
     
    18 янв 2023 Изменено
    1. Посмотреть предыдущие комментарии (2)
    2. whyhexxx
      kennnnnu, 3-7 такой бред, откуда ты это берешь? Мне просто интересно, ты 1 день в php? Если не знаешь - не пиши
    3. kennnnnu
      whyhexxx, 3 - бенчмарки,
      4 - стандарты php,
      5 - fopen устарел, как и file_get_contents, лучшее решение - cURL,
      6 - в коде нет объявления переменной sendToTelegram2,
      7 - любая нормальная IDE удалит такой тег
Top