Визначення пошукового робота з User-Agent на PHP. Php - Отримання країни-відвідувача від їх IP-адрес Що нам знадобиться

geolocation country-codes (17)

Я хочу отримати країну відвідувача через свій IP ... Зараз я використовую це (http://api.hostip.info/country.php?ip= ......)

Ось мій код:

Ну, це працює нормально, але справа в тому, що це повертає код країни, наприклад, США або CA., а не вся назва країни, наприклад, Сполучені Штати чи Канада.

Отже, є хороша альтернатива hostip.info?

Я знаю, що можу просто написати код, який зрештою перетворить ці дві літери на назву всієї країни, але я просто занадто лінивий, щоб написати код, який містить усі країни...

PS: З якоїсь причини я не хочу використовувати готовий CSV файл або будь-який код, який захопить цю інформацію для мене, щось на зразок ip2country готового коду і CSV.

Answers

Я використовую ipinfodb.com api та отримую саме те, що ви шукаєте.

Його абсолютно безкоштовно, вам просто потрібно зареєструватись у них, щоб отримати свій ключ api. Ви можете включити їх php-клас, завантаживши їх зі свого веб-сайту, або ви можете використовувати формат URL для отримання інформації.

Ось що я роблю:

Я включив їх php-клас у свій скрипт і використовуючи наведений нижче код:

$ipLite = новий ip2location_lite; $ipLite->setKey("your_api_key"); if(!$_COOKIE["visitorCity"])( //I am using cookie to store information $visitorCity = $ipLite->getCity($_SERVER["REMOTE_ADDR"]); if ($visitorCity["statusCode"] == "OK") ( $data = base64_encode(serialize($visitorCity)); setcookie("visitorCity", $data, time()+3600*24*7); //set cookie for 1 week ) ) (base64_decode($_COOKIE["visitorCity"])); echo $visitorCity["countryName"]." Region".$visitorCity["regionName"];

$json = file_get_contents("http://freegeoip.appspot.com/json/66.102.13.106"); $expression = json_decode($json); print_r($expression);

У мене є коротка відповідь на це питання, яке я використав у проекті. У моїй відповіді я вважаю, що у вас є IP-адреса відвідувача

$ ip = "202.142.178.220"; $ipdat = @json_decode(file_get_contents("http://www.geoplugin.net/json.gp?ip=" . $ip)); //get ISO2 country code if(property_exists($ipdat, "geoplugin_countryCode")) ( echo $ipdat->geoplugin_countryCode; ) //get country full name if(property_exists($ipdat, "geoplugin_countryName")) ( echo >geoplugin_countryName;

Я спробував відповісти на Chandra, але моя конфігурація сервера не дозволяє file_get_contents ()

PHP Warning: file_get_contents() URL file-access is disabled in the server configuration

Я змінив код Chandra, щоб він також працював на таких серверах, використовуючи cURL:

Function ip_visitor_country() ( $client = @$_SERVER["HTTP_CLIENT_IP"]; $forward = @$_SERVER["HTTP_X_FORWARDED_FOR"]; $remote = $_SERVER["REMOTE_ADDR"]; $country = "Unknown"; if( fil ($client, FILTER_VALIDATE_IP)) ( $ip = $client; ) elseif(filter_var($forward, FILTER_VALIDATE_IP)) ( $ip = $forward; ) else ( $ip = $remote; ) $ch = curl_init(); ($ch, CURLOPT_URL, "http://www.geoplugin.net/json.gp?ip=".$ip); curl_setopt($ch, CURLOPT_HEADER, 0); ip_data_in = curl_exec($ch); // string curl_close($ch); see .com/questions/3110487/ if($ip_data && $ip_data["geoplugin_countryName"] != null) ( $country = $ip_data["geoplugin_countryName"]; ) return "IP: ".$ip." # Country: ".$country; ) echo ip_visitor_country(); // output Coutry name?>

Надіюсь це допоможе;-)

Ви можете використовувати простий API від http://www.geoplugin.net/

$xml = simplexml_load_file("http://www.geoplugin.net/xml.gp?ip=".getRealIpAddr()); echo $xml->geoplugin_countryName ; echo "

"; foreach ($xml as $key => $value) ( ​​echo $key , "= " , $value , " \n" ; ) echo "
";

Використовувана функція

Function getRealIpAddr() ( if (!empty($_SERVER["HTTP_CLIENT_IP"])) //check ip from share internet ( $ip=$_SERVER["HTTP_CLIENT_IP"]; ) elseif (!empty($_SERVER["HTTP_X_FORWARDED_FOR" ])) //to check ip is pass from proxy ( $ip=$_SERVER["HTTP_X_FORWARDED_FOR"]; ) else ( $ip=$_SERVER["REMOTE_ADDR"]; ) return $ip;

United states geoplugin_city = San Antonio geoplugin_region = TX geoplugin_areaCode = 210 geoplugin_dmaCode = 641 geoplugin_countryCode = US geoplugin_countryName = United States geoplugin_continentCode = NA geoplugin_latitude88_9 8.398696899414 geoplugin_regionCode= TX geoplugin_regionName= Texas geoplugin_currencyCode= USD geoplugin_currencySymbol= $ geoplugin_currencyConverter= 1

У вас є так багато варіантів, з якими ви можете

завдяки

Спробуйте цей простий код з одним рядком, ви отримаєте країну та місто відвідувачів зі своєї IP-адреси.

$tags = get_meta_tags("http://www.geobytes.com/IpLocator.htm?GetLocation&template=php3.txt&IpAddress=" . $_SERVER["REMOTE_ADDR"]); echo $tags["country"]; echo $tags["city"];

Багато різних способів зробити це...

Рішення №1:

Одна стороння служба, яку можна використовувати, - http://ipinfodb.com . Вони надають ім'я хоста, геолокацію та додаткову інформацію.

Зареєструйтесь для ключа API тут: http://ipinfodb.com/register.php . Це дозволить вам отримувати результати зі свого сервера, без цього він не працюватиме.

Скопіюйте та пропустіть наступний код PHP:

$ipaddress = $_SERVER["REMOTE_ADDR"]; $api_key = "YOUR_API_KEY_HERE"; $data = file_get_contents("http://api.ipinfodb.com/v3/ip-city/?key=$api_key&ip=$ipaddress&format=json"); $ data = json_decode ($ data); $country = $data["Country"];

Даунсайд:

Цитата з їхнього сайту:

Наш безкоштовний API використовує версію IP2Location Lite, яка забезпечує нижчу точність.

Рішення №2:

Ця функція поверне назву країни за допомогою служби http://www.netip.de/ .

$ipaddress = $_SERVER["REMOTE_ADDR"]; function geoCheckIP($ip) ( _get_contents("http://www.netip.de/search?query=".$ip); $patterns=array(); $patterns["country"] = "#Country: ( .*?) #i"; $ipInfo=array(); foreach ($patterns as $key => $pattern) ( $ipInfo[$key] = preg_match($pattern,$response,$value) && !empty( $value) ? $value : "not found"; ) return $ipInfo; ) print_r(geoCheckIP($ipaddress));

Висновок:

Array (=> DE - Німеччина) // Full Country Name

Перевірте php-ip-2-country із code.google. База даних, яку вони надають, оновлюється щодня, тому немає необхідності підключатися до зовнішнього сервера для перевірки, якщо ви розміщуєте свій SQL-сервер. Тому, використовуючи код, вам потрібно буде лише запровадити:

"localhost", //example host name "port" => 3306, //3306 -default mysql port number "dbName" => "ip_to_country", //example db name "dbUserName" => "ip_to_country", //example user name "dbUserPassword" => "QrDB9Y8CKMdLDH8Q", //example user password "tableName" => "ip_to_country", //example table name); $phpIp2Country = новий phpIp2Country($ip,$dbConfigArray); $country = $phpIp2Country->getInfo(IP_COUNTRY_NAME); echo $ country; ?>

Приклад коду (З ресурсу)

"localhost", //example host name "port" => 3306, //3306 -default mysql port number "dbName" => "ip_to_country", //example db name "dbUserName" => "ip_to_country", //example user name "dbUserPassword" => "QrDB9Y8CKMdLDH8Q", //example user password "tableName" => "ip_to_country", //example table name); $phpIp2Country = новий phpIp2Country("213.180.138.148",$dbConfigArray); print_r($phpIp2Country->getInfo(IP_INFO)); ?>

Висновок

Array (=> 3585376256 => 3585384447 => RIPE => 948758400 => PL => POL => POLAND => 213.180.138.148 => 3585378964 => 125.2.5.2. 55)

Ви можете використовувати веб-сервіс із сайту http://ip-api.com
у вашому php-коді, виконайте такі дії:

запит має багато іншої інформації:

Array ("status" => "success", "country" => "COUNTRY", "countryCode" => "COUNTRY CODE", "region" => "REGION CODE", "regionName" => "REGION NAME", "city" => "CITY", "zip" => ZIP CODE, "lat" => LATITUDE, "lon" => LONGITUDE, "timezone" => "TIME ZONE", "isp" => "ISP NAME" , "org" => "ORGANIZATION NAME", "as" => "AS NUMBER / NAME", "query" => "IP ADDRESS USED FOR QUERY",)

ви можете використовувати http://ipinfo.io/ щоб отримати інформацію про ip-адресу. Його простота використання.

city; echo "
".$details->country; echo "
".$details->org; echo "
".$details->hostname; / ?>

Виконання стандартних функцій

I) $Array = array("test1", "test2", "test3", "test3"); unset($Array); ii) $Array = array("test1", "test2", "test3", "test3"); array_pop($Array); iii) $Array = array("test1", "test2", "test3", "test3"); array_splice ($ Array, 1,2); iv) $Array = array("test1", "test2", "test3", "test3"); array_shift($Array);

28.02.16 11.1K

Одна з найпопулярніших і найнеобхідніших функцій на будь-якому сайті – це пошук, реалізований за допомогою спеціальної форми. Цей функціонал дозволяє відвідувачам швидко знаходити на сайті контент, що їх цікавить.

Сьогодні ми хочемо розповісти, як зробити пошук по сайту за допомогою спеціальної форми, яка опитуватиме таблиці бази даних та виводитиме інформацію про поточних керівників на сайті. Ви навчитеся створювати таблиці бази даних, яка міститиме інформацію про поточний персонал.

Розробляти форми пошуку за допомогою PHP, а також познайомитеся з SQL ( Structured Query Language) – спеціальною мовою для збору, запису та модифікації інформації, що міститься в базах даних. Перед тим, як почати, рекомендуємо вам скачати файли проекту.

Що вам знадобиться

  • Інструмент для роботи з базами даних MySQL.
  • Локальний або віддалений сервер з підтримкою PHP.
  • Текстовий редактор.

Створюємо базу даних

Якщо ви не зовсім впевнені, що зможете розібратися з базою даних на вашому хостингу, зв'яжіться з хостером для отримання відповідних інструкцій або допомоги. Після того, як база даних буде створена, вам потрібно буде підключити її, створити таблицю та записати до неї необхідні дані.

Найпопулярнішим інструментом для управління MySQL є PHP My Admin, цього інструменту буде достатньо для нашого сьогоднішнього керівництва.

Створення таблиці

Наша таблиця має бути створена у наступному форматі:

Column Name Data Type Length Null or Not Null Primary key? Auto Increment
ID INT 1 Not Null Yes Yes
FirstName Varchar 50 Not Null No No
LastName Varchar 50 Not Null No No
Email Varchar 50 Not Null No No
PhoneNumber Varchar 15 Not Null No No

Таблиця бази даних складається зі стовпців і рядків, як у Excel. Перший стовпець дозволяє ідентифікувати дані на ім'я. Далі йде колонка Data types (тип даних), яка вказує нам на тип даних, які у колонці. У полі Length (Довжина) вказується максимальний обсяг пам'яті (сховища) для стовпчика таблиці. Ми використовуємо змінні, які дають більшу гнучкість. Іншими словами, якщо довжина ПІБ менше 50 символів, то буде зайнята лише частина відведеного місця.

І серед даних персоналу може бути порожніх значень ( null, empty). Перший рядок виділено жовтим кольором, тому що стовпець ID – наш основний ключ. Основний ключ у базі даних гарантує, що кожен запис буде унікальним. До цієї колонки також застосований автоінкремент, а це означає, що кожному запису в нашій базі даних присвоюватиметься унікальний номер автоматично.

Вносимо представників персоналу до таблиці

Як тільки розберетеся з таблицею, почніть заповнювати її даними. 6 записів цілком достатньо, щоб закріпити в думці процедуру. Нижче пропоную вам власний приклад:

Column ID FirstName LastName Email PhoneNumber
2 Ryan Butler [email protected] 417-854-8547
3 Brent Callahan [email protected] 417-854-6587

Розробка форми

Щоб створити форму пошуку по сайту через Google, відкрийте будь-який відповідний текстовий редактор. Я рекомендую скористатися безкоштовним PSPad. Ви можете використовувати будь-який текстовий редактор, де передбачено підсвічування синтаксису. Це значною мірою полегшить процес написання та налагодження PHP-коду. Створюючи сторінку для форми пошуку, не забудьте зберегти її у форматі .php, інакше PHP-код не оброблятиметься належним чином. Як тільки збережіть документ, скопіюйте до нього наступну розмітку:

Пошук контактів:

Детальний пошук контактів

Ви можете шукати на ім'я або прізвище

Якщо ви знайомі з мовою HTML, то тут вам все повинно бути зрозуміло як мінімум до тега form, що відкриває. Усередині цього тегу знаходиться найважливіший елемент коду – атрибут action . Як дія нашої форми ми вказали назву нашого файлу, а потім застосували до нього рядок запиту “ go”.

Перевірка на відповідність критерію

Коли користувач вводить ім'я або прізвище, а потім натискає кнопку підтвердження, форма передає дані собі і додає в кінці рядок запиту “ go”. На цьому етапі ми перевіряємо наявність рядка запиту go . Якщо результат є позитивним, виводимо результати пошуку.

До виведення запитуваних результатів нам потрібно перевірити ще раз: (1) чи була підтверджена форма, (2) чи містить рядок запиту значення go, (3) був пошуковий запит введений у нижньому або верхньому регістрі? Якщо жодна з перевірок не дає позитивного результату ( true), то від нас не потрібно виконувати будь-які дії.

Для початку додамо невеликий блок коду PHP пошук по сайту після тега, що закриває:

Спершу ми відкриваємо блок PHP-коду тегом ””.

Будь-який PHP-код у цій парі тегів буде виконуватися сервером. Потім ми перевіряємо, чи була підтверджена форма:

Введіть пошуковий запит

"; } ?>

Ми скористаємося вбудованою функцією isset, яка повертає значення типу bool, і помістимо до неї масив $_POST. Логічне вираження у програмуванні дозволяє отримати нам або true, або false.

Отже, якщо функція повертає значення true, то форма була підтверджена, і нам потрібно продовжити виконання коду далі. Якщо ж функція повертає значення false , ми виведемо повідомлення про помилку. Збережіть весь набраний код у файлі search_submit.php.

Введіть пошуковий запит

"; } } } ?>

Ми вкладаємо ще один умовний логічний вираз усередину основного, але тільки цього разу ми використовуємо масив $_GET разом із значенням “ go”. Збережіть зміни у файлі search_go.php.

Тепер нам потрібно переконатися, що відвідувачі можуть вводити першу літеру в рядок запиту лише у верхньому або лише у нижньому регістрі. Нам також потрібно передбачити спосіб урахування критеріїв пошуку, запроваджених відвідувачем. Найкраще перевіряти введені відвідувачем дані за допомогою регулярного виразу:

Ми вкладаємо ще один умовний логічний вислів усередину наших двох. На цей раз ми використовуємо регулярний вираз для перевірки введення. Ми використовуємо вбудовану функцію preg_match з двома параметрами: регулярний вираз і поле форми, до якого повинна застосовуватися перевірка.

У нашому випадку це буде поле «Ім'я» ( name). Щоб отримати параметри пошуку, вказані відвідувачем, ми створюємо змінну $name, і прив'язуємо до неї значення POST з назвою поля форми, яке буде використовуватися в SQL-запиті . Зараз ми реалізували: (1) відправлення даних форми, (2) рядок запиту включає значення go і (3) відвідувач ввів або заголовну, або малу першу букву. І всі ці перевірки відбуваються ще до внесення змін до бази даних. Збережіть усі зміни.

Результати Connect, Select, Query та Return з таблиці бази даних

Щоб отримати дані з таблиці, спочатку у скрипті пошуку сайту потрібно підключитися до сервера. Для цього ми використовуємо наступний код:

", "") or die (" Я не можу підключитися до бази даних, оскільки: " . mysql_error()); else( echo "

Будь ласка, введіть пошуковий запит

"; } } }?>

Ми створюємо змінну $db і прив'язуємо її до вбудованої функції MySQL mysql_connect , яка приймає три параметри: сервер з базою даних ( localhost, якщо ви працюєте локально), логін та пароль.

Після цього ми запускаємо вбудовану PHP-функцію die, яка зупиняє подальше виконання коду, якщо немає з'єднання з базою даних. І виводимо інформацію про помилку, запускаючи вбудовану функцію MySQL mysql_error, яка поверне причину помилки. Збережіть файл search_connectdb.php.

Будь ласка, введіть пошуковий запит

"; } } } ?>

Створюємо змінну під назвою mydb і прив'язуємо її до вбудованої MySQL-функції mysql_select_db, а потім вказуємо назву бази даних, яку створили раніше. Далі ми опитуємо таблицю бази даних за допомогою SQL-запиту зі змінною name, де містяться параметри пошуку, введені відвідувачем:

Будь ласка, введіть пошуковий запит

"; } } } ?>

При опитуванні таблиці бази даних ми створюємо змінну $sql і прив'язуємо її до рядка, що містить SQL-запит . Ми використовуємо оператор SELECT для отримання значень зі стовпців id , а також імені та прізвища з таблиці contacts . Потім ми використовуємо інструкцію WHERE разом зі значеннями імені та прізвища, щоб звузити пошук.

Разом із оператором LIKE ми використовуємо знак відсотка (%) – спецсимвол, який повертає 0 і більше знаків, а також змінну name із рядка пошуку. В результаті LIKE ( у поєднанні зі спецсимволом) знаходить будь-яке відповідне ім'я у таблиці бази даних. Можна описати весь процес так: « Ми вибираємо ім'я та прізвище з таблиці contacts, які відповідають введеним відвідувачем». Збережіть файл search_query.php.

Будь ласка, введіть пошуковий запит

"; } } } ?>

Ми створюємо змінну $result, і присвоюємо їй значення функції mysql_query(), вносячи її до $query. Тепер наш запит зберігається у змінній result. Щоб вивести результат у PHP, ми створюємо цикл, а потім виводимо дані в неупорядкованому списку:

n"; echo "

  • " . "
  • n"; echo ""; ) ) else( echo "

    Будь ласка, введіть пошуковий запит

    "; } } } ?>

    Спочатку ми створюємо цикл while , всередині нього створюємо змінну під назвою row , і ініціалізуємо її значенням функції mysql_fetch_array , яка приймає змінну result , в якій знаходиться наш SQL-запит . Всередині циклу while ми присвоюємо кожному значення стовпця значення змінної з ідентичною назвою. Потім ми виводимо значення всередину неупорядкованого списку.

    Тут важливо звернути увагу на два моменти: (1) всередині циклу while не потрібно надавати значення змінним масиву row, так як значення можна брати безпосередньо з масиву row; (2) тег anchor , який ми використовуємо в назві нашого файлу разом із id та основним ключем. Причина цього полягає в тому, що багато пошукових елементів спочатку нічого не відображається.

    Так як ми показуємо тільки ім'я та прізвище, приписуючи ID в кінці нашого тега anchor, ми можемо використовувати ID для додаткового запиту, який дозволить вивести додаткову інформацію про персонал. Збережіть файл та протестуйте форму PHP пошуку по сайту ( search_display.php).

    Забираємо табуляцію

    Результати виводяться у вигляді невпорядкованого списку, але суть у тому, що нам не потрібна табуляція. Щоб позбутися від неї, додайте наступне CSS-правило на початок вашого файлу в head :

    Пошук за буквами

    Для пошуку по літерах знадобиться лише кілька додаткових рядків коду. Додамо цей зручний функціонал для відвідувачів. Таким чином, вони зможуть знаходити представників персоналу за літерами, що містяться у імені чи прізвищі.

    Додайте наступний рядок коду після тега form :

    A | B | K

    Ми прив'язуємо тег до рядка запиту з by за допомогою анкору, та встановлюємо його рівним певній літері. Щоб реалізувати функціонал пошуку за літерами, нам потрібно додати наступний код прямо після закривання фігурної дужки у вихідному скрипті, як показано нижче:

    )//Закінчення скрипту пошукової форми if(isset($_GET["by"]))( $letter=$_GET["by"]; //Підключення до бази даних $db=mysql_connect ("servername", "username") , "password") or die ("Я не можу підключитися до бази даних, оскільки: " . mysql_error()); //-Виберіть базу даних $mydb=mysql_select_db("yourDatabase"); $sql="SELECT ID, FirstName, LastName FROM Contacts WHERE FirstName LIKE "%" . $letter . "%" OR LastName LIKE "%" . $letter ."%""; result=mysql_query($sql); //-Результати підрахунку $numrows=mysql_num_rows($result);

    " .$numrows . " results found for " . $letter . "

    "; //-Запуск циклу та сортування результатів while($row=mysql_fetch_array($result))( $FirstName =$row["FirstName"]; $LastName=$row["LastName"]; $ID=$row[ "ID"]; //- Вивести результат у масиві echo "
      n"; echo "
    • " . "" .$FirstName . " " . $LastName . "
    • n"; echo "
    "; } }

    Тут ми змінили чотири фрагменти коду скрипту пошуку на сайті:

    • Ми використовуємо функцію isset(), і вносимо до неї масив $_GET, а потім перевіряємо значення by;
    • Створюємо змінну $letter та ініціалізуємо її значення масивом $_GET;
    • Додаємо змінну letter в SQL-запит;
    • Вказуємо змінну letter усередині виразу, в якому отримуємо підраховану кількість рядків.

    Збережіть файл search_byletter.php та перевірте результат.

    Пошук певного співробітника

    Щоб відобразити інформацію про решту персоналу, яка передається через унікальний id всередині нашого посилання, потрібно додати наступний код прямо після закривання фігурної дужки у скрипті letter , як показано нижче:

    )//Закінчення скрипту if(isset($_GET["id"]))( $contactid=$_GET["id"]; //Підключення до бази даних $db=mysql_connect ("servername", "username", " password") or die ("Я не можу підключитися до бази даних, тому що: " . mysql_error()); //-select the database to use $mydb=mysql_select_db("yourDatabase"); //- Запит до таблиці бази даних $sql="SELECT * FROM Contacts WHERE ID=" . $contactid; ($result))( $FirstName =$row["FirstName"]; $LastName=$row["LastName"]; $PhoneNumber=$row["PhoneNumber"]; $Email=$row["Email"]; //- Вивести результат у масиві echo "

    "; } }

    Тут ми змінили чотири фрагменти коду:

    • Ми використовуємо функцію isset(), і з її допомогою перевіряємо значення ID в масиві $_GET;
    • Створюємо змінну $contactid та ініціалізуємо її масивом $_GET;
    • У таблиці виділяємо все, що зазначено зірочкою *. Зірочка - це скорочене позначення в SQL, яке означає « дайте мені всі стовпці та рядки з таблиці». Щоб визначити, яку інформацію виводити, ми згадуємо змінну contactid в кінці SQL-виразу;
    • Виводимо додаткову інформацію про кожного представника персоналу.

    Збережіть файл search_byid.php та перевірте результат.

    Зверніть увагу, що наш функціонал працює так, як і належить. При введенні імені або прізвища в поле або при виборі літери як гіперпосилання відображаються лише імена представників персоналу. Якщо навести курсор на посилання, у рядку статусу можна побачити унікальний ID . Якщо натиснути на конкретну людину, то адресний рядок зміниться, і з'явиться додаткова інформація про цього співробітника.

    SQL-ін'єкція

    Причина, через яку ми додали в наше поле пошуку регулярне вираження, полягає в тому, щоб ніхто не зміг втрутитися в наш SQL-запит. Раніше ця проблема була поширена, і хакери примудрялися проводити власні SQL-запити маніпулюючи при цьому вашим додатком. Наприклад, якби ми дозволили використовувати апостроф у нашому полі, то хакер міг би просто видалити базу даних, використовуючи запит:

    "DROP TABLE

    Як вже було зазначено, регулярне вираження гарантує, що як перший символ відвідувач може вводити лише літери в нижньому або верхньому регістрі.

    На завершення

    У сьогоднішній статті ми розглянули, як зробити пошук по сайту, а також:

    • Створювати бази даних та відповідні таблиці;
    • використовувати інструменти для управління базами даних, створювати стовпці та вводити дані;
    • Розробляти форми пошуку на основі PHP, яка вміє здійснювати перевірку даних, наявність змінних у запиті, а також з'єднуватися з базою даних і виводити результати з таблиці;
    • Як захистити програму та базу даних від SQL-ін'єкцій.

    Використовуючи знання, отримані з цієї статті, ви зможете легко модифікувати чужий код, а також при необхідності розширювати функціонал форми пошуку.

    Дана публікація є перекладом статті « How to Create a Search Feature with PHP and MySQL» , підготовленою дружною командою проекту

    Добре погано

    У цій статті розглянемо 2 скрипти Лічильник відвідувачівна php, призначених для підрахунку кількості відвідувачів вашого сайту, один з яких взаємодіє з Базою Даних MySQL, а другий просто записує дані про відвідувачів онлайн у текстовий файл і бере інформацію звідти, тобто без бази даних.

    Скрипти дуже прості в установці і розберемо кожен з них окремо.

    Лічильник відвідувачів на php з базою даних MySQL

    Перший скрипт сам створить таблиці для Бази MySQL (якщо ви цього не зробили самі) і складається з одного основного класу (файлу), який зберігає всі дані в базі та виводить на сторінки таке:

    Параметри виводу

    • Скільки відвідувачів зараз в онлайн;
    • Яка кількість відвідувачів подивилася цю сторінку за сьогоднішній день;
    • Скільки унікальних відвідувачів надійшло на ваш сайт за добу;
    • Кількість відвідувачів за весь час;
    • IP-адреса для кожного відвідувача;
    • Реальний час та дата.

    У завантаженому архіві у вас буде, як я і писав вище, один всього файл smart_counter.class.php з основним класом, і його необхідно залити цей файл на хостинг в головну директорію.

    $this->db_server = "localhost"; // Ім'я вашого Хосту $this->db_username = "root"; // Логін від Бази даних $this->db_password = "1234"; // Пароль від бази даних $this->db_name = "name_bd"; // Ім'я бази даних

    І останній крок для встановлення лічильника відвідувачів:
    там на вашій сторінці, де ви плануєте розмістити показ лічильника відвідувачів, пропишіть цей код.

    inc_interval = 86 400; $sc->db_server = "localhost"; // Ім'я вашого Хосту $sc->db_username = "root"; // Логін від Бази даних $ sc-> db_password = "1234"; // Пароль бази даних $sc->db_name = "name_bd"; // Назва бази даних $sc->db_main_table = "sc_main"; $sc->db_users_table = "sc_users"; $sc->update_counter(); echo sprintf("Total visits: %d
    ", $sc->get_total_visits()); echo sprintf("Visits on this page: %d
    ", $sc->get_page_visits()); echo sprintf("Today visits: %d
    ", $sc->get_today_visits()); echo sprintf("Online users: %d

    ", $sc->get_active_visits(300)); $lv = $sc->get_latest_visitors(); foreach ($lv як $ip=>$info) ( echo $ip . " "; echo $info["host" ] .

    "; } ?>

    Не забудьте так само змінити свої дані від Бази в цьому коді.

    Скрипт відвідувачі онлайн без MySQL

    PHP скрипт - відвідувачі Онлайн відрізняється від попереднього тільки тим, що він не використовує базу даних, а працює з текстовими файлами, і при цьому практично не створює навантаження на ваш сервер. Він також використовує один PHP клас, який одночасно записує, і видаляє дані з цих файлів, і виводить потрібну інформацію про відвідувачів вашого сайту.

    Цей скрипт виводить наступну інформацію про відвідувачів на сайті:

    Дані про відвідувачів

    • Скільки Хостів всього;
    • Скільки Хостів за сьогодні;
    • Скільки хітів всього;
    • Скільки хітів за сьогодні;
    • Скільки відвідувачів було всього;
    • Скільки відвідувачів на даний момент.
    людина зі стажем 10 листопада 2013 року о 13:29

    Статистика відвідувань сайту без сторонніх сервісів

    • Розробка веб-сайтів

    Доброго вам дня! Я думаю, все ще пам'ятають, як нещодавно після невеликих збоїв на серверах Google багато сайтів теж давали збої.
    Насправді така ситуація може трапитися з будь-яким сервісом в інтернеті, тому краще зайвий раз перестрахуватися.
    Для багатьох організацій, статистика відвідуваності сайту впливає на роботу маркетологів, які визначають, у яких містах більший попит на продукцію тощо. Але що, якщо сервіс статистики, який використовується на сайті, тимчасово дасть збій?

    Є рішення: використовувати разом із сторонніми сервісами свій скрипт обліку відвідувань сайту.

    Наш скрипт складатиметься з трьох файлів:

    • stat.php - инклудится в кожну сторінку, за якою необхідно стежити
    • stat.log - файл, в який записуватиметься історія відвідувань
    • seestats.php - файл для перегляду статистики
    Насправді можна використовувати будь-які імена файлів.

    Файл stat.php
    $col_zap) array_shift($lines); $lines = $date."|".$bot."|".$ip."|".$home."|\r\n"; file_put_contents($file, $lines); ?>

    Щоб кожен раз вручну не копати файл stat.log, створимо файл для виведення статистики відвідувань сайту:
    Файл seestats.php

    sizeof($file)) ( $col=sizeof($file); ) echo "Останні ".$col."відвідувань сайту:"; ?> sizeof($file)-$col; $si--) ( $string=explode("|",$file[$si]); $q1[$si]=$string; // дата і час $q2[$si]=$string; // ім'я бота $q3[$si]=$string; // ip бота $q4[$si]=$string; "; echo" "; echo" "; echo" ";) echo "
    Час та дата Дані про відвідувача IP/проксі Відвіданий URL
    ".$q1[$si]."".$q2[$si]."".$q3[$si]."".$q4[$si]."
    "; echo"
    Переглянути останні 100 500"; echo" 1000відвідувань."; echo "
    Переглянути всі відвідування.
    "; echo ""; ?>

    От і все! Тепер навіть під час падіння liveinternet або Яндекс.Метрики, Ви завжди зможете дізнатися, хто заходив до Вас на сайт!

    php, статистика, скрипт


    Часто на сайтах можна бачити фразу, зараз даний сайт переглядає стільки людей, або навіть список зареєстрованих відвідувачів, що знаходяться в даний момент на сайті. Зазвичай такий сервіс називають "Список відвідувачів OnLine". Враховуючи, що у відвідувача може динамічно змінюватися IP-адреса, або навпаки, декілька відвідувачів можуть виходити в Інтернет з-під однієї IP-адреси, для підрахунку унікальних відвідувачів на сайті вдаються до сесій. Створимо таблицю sessionв якій зберігатимемо унікальні ідентифікатори сесії (SID), призначені відвідувачам.

    Таблиця session

    CREATE TABLE session (id_session tinytext NOT NULL, putdate datetime NOT NULL default "0000-00-00 00:00:00", user tinytext NOT NULL) TYPE=MyISAM;

    Таблиця має три поля - id_session, поле, куди поміщається SID сесії, поле putdate, для того, зберігання часу звернення відвідувача до сторінок сайту та поле user, яке нами використовуватися не буде, але в якому можна зберігати ім'я користувача, якщо у вас є система авторизації і ви хочете розрізняти гостей та авторизованих користувачів. Передбачається, що ім'я користувача міститься в елементі суперглобального масиву $_SESSION["user"] - якщо вас цікавить авторизація на PHP, з ним можна ознайомитися по

    На початок кожної сторінки сайту, яка братиме участь у реєстрації відвідувачів, слід за допомогою конструкції помістити наступний код.

    Скрипт реєстрації відвідувачів у таблиці session

    // Починаємо сесію session_start(); // Отримуємо унікальний id сесії$id_session = session_id(); include "config.php"; // Перевіряємо, чи є такий id в базі даних$query = "SELECT * FROM session WHERE id_session = "$id_session ""; $ ses = mysql_query ($ query ); if(! $ses ) exit( "" ); // Якщо сесія з таким номером вже існує // означає користувач online - оновлюємо час його // останнього відвідування if(mysql_num_rows ($ses )> 0 ) ( $query = "UPDATE session SET putdate = NOW(), user = "$_SESSION [user] "WHERE id_session = "$id_session""; mysql_query ($query); ) // Інакше, якщо такого номера немає – відвідувач щойно // увійшов – поміщаємо до таблиці нового відвідувача else ($query = "INSERT INTO session VALUES("$id_session ", NOW(), " $_SESSION [user] ")"; if(! mysql_query ($query )) ( echo $query . "
    " echo "

    Помилка при додаванні користувача

    "
    ; exit(); ) // Вважатимемо, що користувачі, які були відсутні // протягом 20 хвилин - залишили ресурс - видаляємо їх // id_session з бази даних$query = "DELETE FROM session WHERE putdate< NOW() - INTERVAL "20" MINUTE" ; mysql_query ($query); ?>

    Протокол HTTP не є сесійним протоколом, тому ми можемо фіксувати лише звернення відвідувачів до сторінок сайту – скільки після цього відвідувач читатиме сторінку – одному богу відомо – отримати цю інформацію ми не зможемо. Тому ми вважатимемо, що якщо відвідувач не звертається до сторінок сайту більше 20 хвилин - він пішов і його можна видаляти з таблиці session.

    Тепер нам залишається лише вивести вміст таблиці sessionабо підрахувати кількість відвідувачів у ній.

    Виводимо вміст таблиці session

    // Встановлюємо з'єднання з базою даних include "config.php"; // Виводимо імена всіх відвідувачів, записи про які є // у таблиці session$query = "SELECT * FROM session"; $ath = mysql_query ($query); if(! $ath ) exit( "

    Помилка у запиті до таблиці сесій

    "
    ); // Якщо хоч хтось є – виводимо таблицю if(mysql_num_rows ($ath )> 0 ) ( echo " " ; while($author = mysql_fetch_array ($ath )) ( // Якщо відвідувач не зареєстрований // виводимо замість його імені – "анонім" if(empty($author ["user"])) echo "" ; else echo " " ; ) echo "
    анонім
    " . $author [ "user" ]. "
    " ; } ?>

    Для встановлення з'єднання з базою даних нам знадобиться конфігураційний файл config.php, наступного змісту.

    Конфігураційний файл config.php

    //////////////////////////////////////////////////// ////////// // 2003-2011 (C) IT-студія SoftTime (http://www.сайт) //////////////////// ///////////////////////////////////////////////// Зараз виставлений сервер локальної машини$dblocation = "localhost"; // Ім'я бази даних, на хостингу чи локальній машині$dbname = "dbase"; // Ім'я користувача бази даних$dbuser = "root"; // та його пароль $dbpasswd = ""; // Встановлюємо з'єднання з базою даних$dbcnx = @ mysql_connect ($dblocation, $dbuser, $dbpasswd); if (! $dbcnx ) ( exit( "

    На даний момент сервер бази даних не доступний, тому коректне відображення сторінки неможливе.

    "
    ); } // Вибираємо базу даних if (! @ mysql_select_db ($dbname, $dbcnx)) ( exit( "

    На даний момент база даних не доступна, тому коректне відображення сторінки неможливе.

    "
    ); } // Встановлюємо кодування з'єднання@ mysql_query ("SET NAMES "cp1251""); ?>