Sprawdź geolokalizację
Sprawdź lokalizację po IP
Kod skryptu poniżej:
Oto krótki opis, jak działa ten kod PHP do geolokalizacji IP:
Opis działania skryptu:
- Formularz HTML:
- Użytkownik wpisuje adres IP do pola tekstowego i klika „Szukaj”.
- Formularz wysyła dane metodą.1POST
- Walidacja IP:
- Skrypt sprawdza, czy wprowadzony adres IP ma poprawny format (IPv4), używając wyrażenia regularnego.
- Dodatkowo sprawdza, czy każda z czterech liczb (oktetów) mieści się w zakresie.10–255
- Zapytanie do API:
- Jeśli IP jest poprawne, skrypt wysyła zapytanie do serwisu.1http://ip-api.com/json/{ip}
- API zwraca informacje o lokalizacji: kraj, region, miasto, ISP itd.
- Jeśli IP jest poprawne, skrypt wysyła zapytanie do serwisu
- Wyświetlenie wyników:
- Jeśli API zwróci dane pozytywnie, są one wyświetlane pod formularzem.
- W przypadku błędu (np. nieprawidłowe IP lub przekroczenie limitu API), użytkownik otrzymuje komunikat.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80 <!DOCTYPE html>
<html>
<head>
<title>Geolokalizacja IP + OpenStreetMap</title>
<meta charset="UTF-8">
<link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css" />
<style>
#map { height: 400px; margin-top: 20px; }
</style>
</head>
<body>
<h2>Sprawdź lokalizację po IP</h2>
<form method="post">
<label for="ip">Adres IP:</label>
<input type="text" name="ip" id="ip" required>
<button type="submit">Szukaj</button>
</form>
<?php
$lat = null;
$lon = null;
if ($_SERVER["REQUEST_METHOD"] == "POST" && !empty($_POST['ip'])) {
$ip = trim($_POST['ip']);
$regex = "/^([0-9]{1,3}\.){3}[0-9]{1,3}$/";
if (preg_match($regex, $ip)) {
$parts = explode('.', $ip);
$valid = true;
foreach ($parts as $part) {
if ((int)$part < 0 || (int)$part > 255) {
$valid = false;
break;
}
}
if ($valid) {
$url = "http://ip-api.com/json/{$ip}?fields=status,message,country,regionName,city,isp,query,lat,lon";
$response = file_get_contents($url);
$data = json_decode($response, true);
echo "<h3>Wynik:</h3>";
if ($data['status'] === 'success') {
echo "IP: " . $data['query'] . "<br>";
echo "Kraj: " . $data['country'] . "<br>";
echo "Region: " . $data['regionName'] . "<br>";
echo "Miasto: " . $data['city'] . "<br>";
echo "ISP: " . $data['isp'] . "<br>";
echo "Szerokość: " . $data['lat'] . "<br>";
echo "Długość: " . $data['lon'] . "<br>";
// Przekazanie do JavaScript
$lat = $data['lat'];
$lon = $data['lon'];
echo "<div id='map'></div>";
} else {
echo "Błąd: " . $data['message'];
}
} else {
echo "<p style='color:red;'>Błąd: IP zawiera liczby poza zakresem 0–255.</p>";
}
} else {
echo "<p style='color:red;'>Błąd: Nieprawidłowy format adresu IP.</p>";
}
}
?>
<script src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js"></script>
<?php if ($lat && $lon): ?>
<script>
var map = L.map('map').setView([<?= $lat ?>, <?= $lon ?>], 10);
L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
attribution: '&copy; OpenStreetMap contributors'
}).addTo(map);
L.marker([<?= $lat ?>, <?= $lon ?>]).addTo(map)
.bindPopup("Lokalizacja IP").openPopup();
</script>
<?php endif; ?>
</body>
</html>






















