Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 24.06.2017 22:30:08

Laravel MaxMind (GeoIP2)

https://github.com/Torann/laravel-geoip
https://github.com/pulkitjalan/geoip

нашел 2 модуля под ларавел, но в них предусмотрено подключение только 1 базы, как подкдючить например 2 бд сити дб и исп дб
например в в пхп ридере максмайнда (не ларавел) $reader = new Reader('/usr/local/share/GeoIP/GeoIP2-City.mmdb');

и можно создать несколько ридеров с нужными бд, тут я не совсем понял как, покрайне мере мои попытки привели к ошибкам

Кто-то сталкивался с таким?

Не в сети

#2 25.06.2017 05:50:02

Re: Laravel MaxMind (GeoIP2)

когда работаешь с ларавелем, не обязательно использовать только специальные пакеты под ларавель, можно любые ставить, лишь бы левых зависимостей за собой не тащили. с 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 для тестов – в отладочном окружении приватные айпишники.

Не в сети

#3 25.06.2017 12:57:07

Re: Laravel MaxMind (GeoIP2)

подключение всяких автолоадеров не нужно?
просто установил и new \GeoIp2\Database\Reader(PRJ_ROOT . 'var/GeoLite2-City.mmdb') и работаешь?

а то я уже через нгикс парсинг бд делаю

Не в сети

#4 25.06.2017 13:06:06

Re: Laravel MaxMind (GeoIP2)

require_once 'vendor/autoload.php';

я про это

или
1)установил
2)use GeoIp2\Database\Reader; заюзал
3)$reader = new Reader(файл) так? или можно вот так Reader::(файл)?

Не в сети

#5 25.06.2017 15:13:14

Re: Laravel MaxMind (GeoIP2)

[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

Не в сети

#6 25.06.2017 15:16:45

Re: Laravel MaxMind (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 25.06.2017 15:27:21

Re: Laravel MaxMind (GeoIP2)

просто у меня включен курс в пхп 7

Не в сети

#8 25.06.2017 15:36:35

Re: Laravel MaxMind (GeoIP2)

автолоадер композера уже используется к моменту как ты попытаешься создать ридер. ларавель сам его использует и к моменту обработки запроса он уже подключен

расширение php_curl нужно ставить. оно вообще много где используется. у тебя дебиан? центос? что-то другое?

ps. код который я привёл, из проекта не на ларавеле. у тебя скорее всего будет база лежать где-то в storage, а IP клиента получится из $request->ip() а не как у меня

Изменено constb (25.06.2017 15:38:37)

Не в сети

#9 25.06.2017 16:52:24

Re: Laravel MaxMind (GeoIP2)

у меня дебиан)
странно, что на директорию домена стоит через пхп фмп пхп 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'];
}

в нгикс

Не в сети

#10 25.06.2017 16:54:50

Re: Laravel MaxMind (GeoIP2)

блин. причём тут nginx?

Не в сети

#11 25.06.2017 16:55:47

Re: Laravel MaxMind (GeoIP2)

ну я хочу https://github.com/leev/ngx_http_geoip2_module это заюзать) место либы в пхп)
насчет либы я так понял мне н е хватало курла у пхп 5

Не в сети

#12 25.06.2017 17:07:42

Re: Laravel MaxMind (GeoIP2)

https://github.com/leev/ngx_http_geoip2 … /issues/14

мне вот что вышло)))

Не в сети

#13 25.06.2017 17:25:38

Re: Laravel MaxMind (GeoIP2)

установил, только не понял где это взять?

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)

только где это взять? по запросу

Не в сети

#14 25.06.2017 19:13:49

Re: Laravel MaxMind (GeoIP2)

Смешалось всё — и PHP, и nginx, и curl до кучи. Тебе надо определится, либо делаешь определение страны в nginx, либо в PHP. Если в PHP — тогда никакой ngx_http_geoip2 не нужен (кстати, есть же стандартный ngx_http_geoip_module). Если в PHP — тогда не нужен Composer, т.к. в PHP ты передаёшь страну через переменную (в запросе, окружении и т.д.).

PHP
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'];

Я надеюсь, ты понимашь, что клиент может передать любое значение в заголовках Client-IP и/или X-Forwarded-For.

Не в сети

#15 26.06.2017 00:14:41

Re: Laravel MaxMind (GeoIP2)

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'];
}

или как лучше? именно через пхп (ларавел)

Не в сети

#16 26.06.2017 01:04:21

Re: Laravel MaxMind (GeoIP2)

  1. просто геоип не подойдет у меня бд не дат формата, а их нового

У тебя платная база? Если нет, то, насколько я знаю, они до сих пор выкладывают базу в обоих форматах.

  1. 2)определение делаю через пхп(ларавел)

Использование $_SERVER это никак не Laravel, это просто PHP.

Как лучше — зависит от настройки сервера (серверов). Если у тебя перед nginx стоит Cloudflare, то они посылают собственный заголовок (X-CF-...), см. доки. Если у тебя запросы приходят напрямую в nginx — то кроме REMOTE_ADDR ничего не нужно.

Не в сети

#17 26.06.2017 02:42:37

Re: Laravel MaxMind (GeoIP2)

у меня нгинкс, поставил просто геоип либу для пхп к ларавелю и все) или как в ларавел получить $_SERVER['REMOTE_ADDR'] ? $_ENV?

Не в сети

#18 26.06.2017 02:44:32

Re: Laravel MaxMind (GeoIP2)

или вы предлогаете лучше юзать геоип первую версию и переменки передавать в ларавел?
я уже смирился с тем, что отдаю эту работу ларавел

Не в сети

#19 26.06.2017 03:11:25

Re: Laravel MaxMind (GeoIP2)

Request::ip() похоже нашел о чем вы))

Не в сети

#20 26.06.2017 11:15:46

Re: Laravel MaxMind (GeoIP2)

  1. или вы предлогаете лучше юзать геоип первую версию и переменки передавать в ларавел?

Если в самом nginx геолокация не нужна — то делать всё в Laravel. Если нужна — можно и переменными передавать, можно и в Laravel делать, зависит от твоей системы (если всё на одном хосте и ты единственный админ — проще через nginx).

  1. Request::ip() похоже нашел о чем вы))

Да.

Не в сети

Подвал раздела