Загрузка...

Sending the TG form about all the information of the user of the site

Thread in Backend created by feefef Jan 17, 2023. 374 views

  1. feefef
    feefef Topic starter Jan 17, 2023 3 May 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 Jan 18, 2023 4 Jan 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 кода, закрывающий тег (?>) не нужен.

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