-
Notifications
You must be signed in to change notification settings - Fork 0
Basic Usage
Rumen Damyanov edited this page Jul 31, 2025
·
1 revision
Comprehensive examples showing all the core functionality of the php-geolocation package.
- Simple Country Detection
- Language Detection
- Client Information
- Complete Visitor Data
- Cookie Management
- Local Development Testing
<?php
require_once 'vendor/autoload.php';
use Rumenx\Geolocation\Geolocation;
$geo = new Geolocation();
$country = $geo->getCountryCode();
if ($country) {
echo "Visitor is from: {$country}";
// Output: "Visitor is from: US"
} else {
echo "Country could not be determined";
}$geo = new Geolocation();
$country = $geo->getCountryCode();
switch ($country) {
case 'US':
case 'CA':
$currency = 'USD';
$timezone = 'America/New_York';
break;
case 'GB':
$currency = 'GBP';
$timezone = 'Europe/London';
break;
case 'DE':
case 'FR':
$currency = 'EUR';
$timezone = 'Europe/Berlin';
break;
default:
$currency = 'USD';
$timezone = 'UTC';
}
echo "Currency: {$currency}, Timezone: {$timezone}";$countryToLanguage = [
'US' => ['en'],
'CA' => ['en', 'fr'], // Multiple languages
'GB' => ['en'],
'DE' => ['de'],
'FR' => ['fr'],
'ES' => ['es'],
'JP' => ['ja'],
'BR' => ['pt'],
];
$geo = new Geolocation($_SERVER, $countryToLanguage);
$country = $geo->getCountryCode();
$language = $geo->getLanguageForCountry($country);
echo "Country: {$country}, Language: {$language}";
// Output: "Country: DE, Language: de"// Available languages on your website
$availableLanguages = ['en', 'fr', 'de', 'es'];
$geo = new Geolocation($_SERVER, $countryToLanguage);
$country = $geo->getCountryCode();
// Get language considering available site languages
$language = $geo->getLanguageForCountry($country, $availableLanguages);
if ($language) {
echo "Suggested language: {$language}";
} else {
echo "Using default language: en";
$language = 'en';
}$geo = new Geolocation();
// Get preferred language from Accept-Language header
$preferredLang = $geo->getPreferredLanguage();
echo "Browser prefers: {$preferredLang}";
// Output: "Browser prefers: en-US"
// Get all accepted languages
$info = $geo->getGeoInfo(['all_languages']);
print_r($info['all_languages']);
// Output: ['en-US', 'en', 'fr']$geo = new Geolocation();
$browser = $geo->getBrowser();
if ($browser) {
echo "Browser: {$browser['browser']} v{$browser['version']}";
// Output: "Browser: Chrome v91.0"
} else {
echo "Browser could not be detected";
}$geo = new Geolocation();
$os = $geo->getOs();
echo "Operating System: {$os}";
// Output: "Operating System: Windows 10"
// OS-specific logic
if (strpos($os, 'Windows') !== false) {
$downloadLink = '/downloads/app-windows.exe';
} elseif (strpos($os, 'Mac') !== false) {
$downloadLink = '/downloads/app-macos.dmg';
} else {
$downloadLink = '/downloads/app-linux.tar.gz';
}$geo = new Geolocation();
$device = $geo->getDeviceType();
switch ($device) {
case 'mobile':
$template = 'mobile.php';
$features = ['touch', 'compact-ui'];
break;
case 'tablet':
$template = 'tablet.php';
$features = ['touch', 'medium-ui'];
break;
case 'desktop':
default:
$template = 'desktop.php';
$features = ['mouse', 'full-ui'];
break;
}
echo "Device: {$device}, Template: {$template}";$geo = new Geolocation();
$resolution = $geo->getResolution();
if ($resolution['width'] && $resolution['height']) {
$width = $resolution['width'];
$height = $resolution['height'];
echo "Screen: {$width}x{$height}";
// Responsive logic
if ($width >= 1920) {
$layout = 'extra-large';
} elseif ($width >= 1200) {
$layout = 'large';
} elseif ($width >= 768) {
$layout = 'medium';
} else {
$layout = 'small';
}
echo "Layout: {$layout}";
}$geo = new Geolocation();
$info = $geo->getGeoInfo();
// Display all available information
foreach ($info as $key => $value) {
if (is_array($value)) {
echo "{$key}: " . json_encode($value) . "\n";
} else {
echo "{$key}: {$value}\n";
}
}
/* Output:
country_code: US
ip: 192.168.1.1
preferred_language: en-US
all_languages: ["en-US","en"]
browser: {"browser":"Chrome","version":"91.0"}
os: Windows 10
device: desktop
resolution: {"width":1920,"height":1080}
*/$geo = new Geolocation();
// Get only country and language information
$basicInfo = $geo->getGeoInfo(['country_code', 'preferred_language']);
// Get only technical information
$techInfo = $geo->getGeoInfo(['browser', 'os', 'device', 'resolution']);
// Get only network information
$networkInfo = $geo->getGeoInfo(['country_code', 'ip']);
print_r($basicInfo);
// Output: ['country_code' => 'US', 'preferred_language' => 'en-US']$geo = new Geolocation($_SERVER, $countryToLanguage, 'user_language');
// Check if language cookie should be set
if ($geo->shouldSetLanguage()) {
$detectedLang = $geo->getLanguageForCountry($geo->getCountryCode());
// Set language cookie
setcookie('user_language', $detectedLang, time() + (86400 * 30), '/');
echo "Language cookie set to: {$detectedLang}";
} else {
echo "Language cookie already exists";
}// Different cookie names for different purposes
$mainGeo = new Geolocation($_SERVER, $countryToLanguage, 'main_lang');
$adminGeo = new Geolocation($_SERVER, $countryToLanguage, 'admin_lang');
// Check main site language
if ($mainGeo->shouldSetLanguage()) {
setcookie('main_lang', 'en', time() + (86400 * 30), '/');
}
// Check admin language separately
if ($adminGeo->shouldSetLanguage()) {
setcookie('admin_lang', 'en', time() + (86400 * 30), '/admin');
}$geo = new Geolocation();
if ($geo->isLocalDevelopment()) {
echo "Running in development mode\n";
echo "Simulation features available\n";
// Show debugging information
$ip = $geo->getIp();
echo "Current IP: {$ip}\n";
} else {
echo "Running in production mode\n";
echo "Using real Cloudflare data\n";
}// Test different countries
$testCountries = ['US', 'CA', 'GB', 'DE', 'FR', 'JP'];
foreach ($testCountries as $country) {
$geo = Geolocation::simulate($country);
$info = $geo->getGeoInfo(['country_code', 'preferred_language']);
echo "Simulating {$country}: ";
echo "Language = {$info['preferred_language']}\n";
}
/* Output:
Simulating US: Language = en-US
Simulating CA: Language = en-CA
Simulating GB: Language = en-GB
Simulating DE: Language = de-DE
Simulating FR: Language = fr-FR
Simulating JP: Language = ja-JP
*/// Simulate with custom options
$customGeo = Geolocation::simulate('DE', $countryToLanguage, 'lang', [
'user_agent' => 'Custom Browser/1.0',
'languages' => ['de-DE', 'en'],
'ip_range' => '192.168.1.'
]);
$info = $customGeo->getGeoInfo();
echo "Custom simulation: {$info['country_code']} - {$info['browser']['browser']}";function detectUserLanguage($availableLanguages = ['en', 'fr', 'de', 'es']) {
$countryToLanguage = [
'US' => ['en'], 'CA' => ['en', 'fr'], 'GB' => ['en'],
'DE' => ['de'], 'AT' => ['de'], 'CH' => ['de', 'fr'],
'FR' => ['fr'], 'BE' => ['fr', 'de'],
'ES' => ['es'], 'MX' => ['es'], 'AR' => ['es'],
];
$geo = new Geolocation($_SERVER, $countryToLanguage, 'site_lang');
if ($geo->shouldSetLanguage()) {
$country = $geo->getCountryCode();
$language = $geo->getLanguageForCountry($country, $availableLanguages);
if ($language) {
setcookie('site_lang', $language, time() + (86400 * 30), '/');
return $language;
}
}
// Return existing cookie value or default
return $_COOKIE['site_lang'] ?? 'en';
}
$userLanguage = detectUserLanguage();
echo "User language: {$userLanguage}";function getLocalizedContent($contentKey) {
$geo = new Geolocation();
$country = $geo->getCountryCode();
$content = [
'welcome' => [
'US' => 'Welcome to our website!',
'DE' => 'Willkommen auf unserer Website!',
'FR' => 'Bienvenue sur notre site web!',
'ES' => '¡Bienvenido a nuestro sitio web!',
'default' => 'Welcome to our website!'
],
'currency' => [
'US' => 'USD', 'CA' => 'CAD',
'GB' => 'GBP', 'DE' => 'EUR', 'FR' => 'EUR',
'JP' => 'JPY', 'default' => 'USD'
]
];
return $content[$contentKey][$country] ?? $content[$contentKey]['default'];
}
echo getLocalizedContent('welcome');
echo "\nCurrency: " . getLocalizedContent('currency');function safeGeolocation() {
try {
$geo = new Geolocation();
$country = $geo->getCountryCode();
return $country ?: 'US'; // Default to US if no country detected
} catch (Exception $e) {
// Log error and return default
error_log("Geolocation error: " . $e->getMessage());
return 'US';
}
}
$country = safeGeolocation();
echo "Safe country detection: {$country}";function validateGeolocationData($geo) {
$country = $geo->getCountryCode();
$ip = $geo->getIp();
$errors = [];
if (!$country || strlen($country) !== 2) {
$errors[] = 'Invalid country code';
}
if (!$ip || !filter_var($ip, FILTER_VALIDATE_IP)) {
$errors[] = 'Invalid IP address';
}
return $errors;
}
$geo = new Geolocation();
$errors = validateGeolocationData($geo);
if (empty($errors)) {
echo "Geolocation data is valid";
} else {
echo "Validation errors: " . implode(', ', $errors);
}- 🚀 Laravel Integration - Complete Laravel examples
- 🎭 Local Development Simulation - Advanced testing features
- 🌍 Language Negotiation - Multi-language websites
- 🔧 Configuration - Advanced configuration options
Previous: Quick Start Guide | Next: Laravel Integration