написал простенький php скрипт отправки формы информации юзера, такие как: 1. Ip 2. Страна 3. ОС (user-agent) Как выглядит: Для работы укажите Ваш бот токен и юзер айди Сам код: <?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"; } ?> 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"; } ?>
Хотелось бы прокомментировать и дать некоторые советы: 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 кода, закрывающий тег (?>) не нужен. А так, в целом, очень хорошее решение
kennnnnu, 3-7 такой бред, откуда ты это берешь? Мне просто интересно, ты 1 день в php? Если не знаешь - не пиши
whyhexxx, 3 - бенчмарки, 4 - стандарты php, 5 - fopen устарел, как и file_get_contents, лучшее решение - cURL, 6 - в коде нет объявления переменной sendToTelegram2, 7 - любая нормальная IDE удалит такой тег