Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
https://github.com/Torann/laravel-geoip
https://github.com/pulkitjalan/geoip
нашел 2 модуля под ларавел, но в них предусмотрено подключение только 1 базы, как подкдючить например 2 бд сити дб и исп дб
например в в пхп ридере максмайнда (не ларавел) $reader = new Reader('/usr/local/share/GeoIP/GeoIP2-City.mmdb');
и можно создать несколько ридеров с нужными бд, тут я не совсем понял как, покрайне мере мои попытки привели к ошибкам
Кто-то сталкивался с таким?
Не в сети
когда работаешь с ларавелем, не обязательно использовать только специальные пакеты под ларавель, можно любые ставить, лишь бы левых зависимостей за собой не тащили. с geoip всё просто – composer require geoip2/geoip2 и вперёд…
вот например таймзона по IP в одном моём проекте
/**
* @param string|null $ip
* @return string|bool
*/
public static function timezoneFromIp($ip = null) {
if ($ip === null) {
$ip = real_remote_addr() ?: 'xxx.yyy.zzz.www';
}
if ($ip === '127.0.0.1' || substr($ip, 0, 4) === '172.') {
$ip = 'xxx.yyy.zzz.www';
}
try {
return (new \GeoIp2\Database\Reader(PRJ_ROOT . 'var/GeoLite2-City.mmdb'))
->city($ip)
->location
->timeZone;
} catch (\Exception $e) {
return false;
}
}
где я заменил на 'xxx.yyy.zzz.www' внешний IP для тестов – в отладочном окружении приватные айпишники.
Не в сети
подключение всяких автолоадеров не нужно?
просто установил и new \GeoIp2\Database\Reader(PRJ_ROOT . 'var/GeoLite2-City.mmdb') и работаешь?
а то я уже через нгикс парсинг бд делаю
Не в сети
require_once 'vendor/autoload.php';
я про это
или
1)установил
2)use GeoIp2\Database\Reader; заюзал
3)$reader = new Reader(файл) так? или можно вот так Reader::(файл)?
Не в сети
[InvalidArgumentException]
Could not find package geoip2/geoip at any version for your minimum-stability (stable). Check the package spelling or your minimum-stability
при composer require geoip2/geoip2
Не в сети
composer update
Loading composer repositories with package information
Updating dependencies (including require-dev)
Your requirements could not be resolved to an installable set of packages.
Problem 1
- maxmind/web-service-common v0.3.1 requires ext-curl * -> the requested PHP extension curl is missing from your system.
- maxmind/web-service-common v0.3.0 requires ext-curl * -> the requested PHP extension curl is missing from your system.
- geoip2/geoip2 v2.5.0 requires maxmind/web-service-common ~0.3 -> satisfiable by maxmind/web-service-common[v0.3.0, v0.3.1].
- Installation request for geoip2/geoip2 ^2.5 -> satisfiable by geoip2/geoip2[v2.5.0].
To enable extensions, verify that they are enabled in your .ini files:
- /etc/php5/cli/php.ini
- /etc/php5/cli/conf.d/05-opcache.ini
- /etc/php5/cli/conf.d/10-pdo.ini
- /etc/php5/cli/conf.d/20-gd.ini
- /etc/php5/cli/conf.d/20-json.ini
- /etc/php5/cli/conf.d/20-mcrypt.ini
- /etc/php5/cli/conf.d/20-mysql.ini
- /etc/php5/cli/conf.d/20-mysqli.ini
- /etc/php5/cli/conf.d/20-pdo_mysql.ini
- /etc/php5/cli/conf.d/20-readline.ini
You can also run `php --ini` inside terminal to see which files are used by PHP in CLI mode.
-------------
я правильно понял, что нужно доставить ext-curl?
Изменено adams (25.06.2017 15:20:44)
Не в сети
просто у меня включен курс в пхп 7
Не в сети
автолоадер композера уже используется к моменту как ты попытаешься создать ридер. ларавель сам его использует и к моменту обработки запроса он уже подключен
расширение php_curl нужно ставить. оно вообще много где используется. у тебя дебиан? центос? что-то другое?
ps. код который я привёл, из проекта не на ларавеле. у тебя скорее всего будет база лежать где-то в storage, а IP клиента получится из $request->ip() а не как у меня
Изменено constb (25.06.2017 15:38:37)
Не в сети
у меня дебиан)
странно, что на директорию домена стоит через пхп фмп пхп 7, а он мне пишет пхп 5
я пока через нгинкс ъолчу все таки сделать, что бы вытаскивать из переменок сервера, вот только как сделать подобную проверку
if(!empty($_SERVER['HTTP_CLIENT_IP'])){
$visitor_ip = $_SERVER['HTTP_CLIENT_IP'];
}elseif(!empty($_SERVER['HTTP_X_FORWARDED_FOR'])){
$visitor_ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
}else{
$visitor_ip = $_SERVER['REMOTE_ADDR'];
}
в нгикс
Не в сети
блин. причём тут nginx?
Не в сети
ну я хочу https://github.com/leev/ngx_http_geoip2_module это заюзать) место либы в пхп)
насчет либы я так понял мне н е хватало курла у пхп 5
Не в сети
https://github.com/leev/ngx_http_geoip2 … /issues/14
мне вот что вышло)))
Не в сети
установил, только не понял где это взять?
maxmind-db/reader suggests installing ext-gmp (bcmath or gmp is requred for decoding larger integers with the pure PHP decoder)
maxmind-db/reader suggests installing ext-maxminddb (A C-based database decoder that provides significantly faster lookups)
только где это взять? по запросу
Не в сети
Смешалось всё — и PHP, и nginx, и curl до кучи. Тебе надо определится, либо делаешь определение страны в nginx, либо в PHP. Если в PHP — тогда никакой ngx_http_geoip2 не нужен (кстати, есть же стандартный ngx_http_geoip_module). Если в PHP — тогда не нужен Composer, т.к. в PHP ты передаёшь страну через переменную (в запросе, окружении и т.д.).
PHPif(!empty($_SERVER['HTTP_CLIENT_IP'])){
$visitor_ip = $_SERVER['HTTP_CLIENT_IP'];
}elseif(!empty($_SERVER['HTTP_X_FORWARDED_FOR'])){
$visitor_ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
Я надеюсь, ты понимашь, что клиент может передать любое значение в заголовках Client-IP и/или X-Forwarded-For.
Не в сети
1)думал через нгинкс, но собранный модуль геоип2 не захотел работать на дебиане 8, просто геоип не подойдет у меня бд не дат формата, а их нового
2)определение делаю через пхп(ларавел)
ип нахожу через такую проверку
if(!empty($_SERVER['HTTP_CLIENT_IP'])){
$visitor_ip = $_SERVER['HTTP_CLIENT_IP'];
}elseif(!empty($_SERVER['HTTP_X_FORWARDED_FOR'])){
$visitor_ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
}else{
$visitor_ip = $_SERVER['REMOTE_ADDR'];
}
или как лучше? именно через пхп (ларавел)
Не в сети
- просто геоип не подойдет у меня бд не дат формата, а их нового
У тебя платная база? Если нет, то, насколько я знаю, они до сих пор выкладывают базу в обоих форматах.
- 2)определение делаю через пхп(ларавел)
Использование $_SERVER это никак не Laravel, это просто PHP.
Как лучше — зависит от настройки сервера (серверов). Если у тебя перед nginx стоит Cloudflare, то они посылают собственный заголовок (X-CF-...), см. доки. Если у тебя запросы приходят напрямую в nginx — то кроме REMOTE_ADDR ничего не нужно.
Не в сети
у меня нгинкс, поставил просто геоип либу для пхп к ларавелю и все) или как в ларавел получить $_SERVER['REMOTE_ADDR'] ? $_ENV?
Не в сети
или вы предлогаете лучше юзать геоип первую версию и переменки передавать в ларавел?
я уже смирился с тем, что отдаю эту работу ларавел
Не в сети
Request::ip() похоже нашел о чем вы))
Не в сети
- или вы предлогаете лучше юзать геоип первую версию и переменки передавать в ларавел?
Если в самом nginx геолокация не нужна — то делать всё в Laravel. Если нужна — можно и переменными передавать, можно и в Laravel делать, зависит от твоей системы (если всё на одном хосте и ты единственный админ — проще через nginx).
- Request::ip() похоже нашел о чем вы))
Не в сети
Страницы 1