Работа через разные IP адреса на PHP


Содержание

Работа через разные IP адреса на PHP

Приветствую.
Есть сервер с 5 ip адресами(соответственно подключения eth0, eth1 и тд) как настроить php и\или UNIX чтобы можно было отправлять запросы в интернет с разных IP? Сокеты, построутинг, нат?
Буду благодарен за дельные своеты.

Высказать мнение | Ответить | Правка | Cообщить модератору

Оглавление

  • Как заставить работать php через разные IP на одном сервере?, sHaggY_caT, 15:10 , 15-Фев-10, ( 1 )
    • Как заставить работать php через разные IP на одном сервере?, dastinto, 15:51 , 15-Фев-10, ( 2 )
      • Как заставить работать php через разные IP на одном сервере?, sHaggY_caT, 16:00 , 15-Фев-10, ( 3 )
      • Как заставить работать php через разные IP на одном сервере?, Andrey, 21:17 , 15-Фев-10, ( 4 )
        • Как заставить работать php через разные IP на одном сервере?, Vladin, 01:33 , 16-Фев-10, ( 5 )

Сообщения по теме [Сортировка по времени | RSS]

>Приветствую.
>Есть сервер с 5 ip адресами(соответственно подключения eth0, eth1 и тд) как
>настроить php и\или UNIX чтобы можно было отправлять запросы в интернет
>с разных IP? Сокеты, построутинг, нат?
>Буду благодарен за дельные своеты.

Что-то у Вас в голове все перепутано :(

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

1 . «Как заставить работать php через разные IP на одном сервере?» + / –
Сообщение от sHaggY_caT (ok) on 15-Фев-10, 15:10
Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

2 . «Как заставить работать php через разные IP на одном сервере?» + / –
Сообщение от dastinto (ok) on 15-Фев-10, 15:51

>Что-то у Вас в голове все перепутано :(
>
>Опишите, пожалуйста, что хотите добиться в конечном счете, так как сейчас написана
>полная чушь с технической точки зрения.

Есть выделенный сервер CentOS, к нему купленно и подключенно 5 IP адресов, есть 1 главный IP, если я буду использовать php функции (например file_get_content) для того чтобы взять что-либо с сети, php будет работать через этот главный адрес, но я хочу иметь возможность варьировать IP адресами (моя задача — парсинг с различныйх айпи), т.е. делать запросы как через прокси сервера. Надеюсь стало понятней.

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

3 . «Как заставить работать php через разные IP на одном сервере?» + / –
Сообщение от sHaggY_caT (ok) on 15-Фев-10, 16:00

>[оверквотинг удален]
>>
>>Опишите, пожалуйста, что хотите добиться в конечном счете, так как сейчас написана
>>полная чушь с технической точки зрения.
>
>Есть выделенный сервер CentOS, к нему купленно и подключенно 5 IP адресов,
>есть 1 главный IP, если я буду использовать php функции (например
>file_get_content) для того чтобы взять что-либо с сети, php будет работать
>через этот главный адрес, но я хочу иметь возможность варьировать IP
>адресами (моя задача — парсинг с различныйх айпи), т.е. делать запросы
>как через прокси сервера. Надеюсь стало понятней.

Никогда не стояло такой задачи, но если в лоб, можно прописывать каждый раз скриптом через утилиту ip значение src (man ip).
Подозреваю, что это криво, и можно сделать средствами PHP (переназначить какие-нибудь переменные)

А вообще, google рулит:

Если будете переписывать роуты, не делайте это через PHP через web-морду, так как несекьюрно, скорее всего получится (могут и порутать), в крайнем случае стоит прикрутить сложный парсинг входных параметров.

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

4 . «Как заставить работать php через разные IP на одном сервере?» + / –
Сообщение от Andrey (??) on 15-Фев-10, 21:17

если выделенный серевер подними пару доменов на разных IP и все. все php функции на каждом сайте будут юзать отдельный IP.

вот примерный конфиг апача

[VirtualHost 88.23.220.200:80]
ServerName visa-msk.ru
DocumentRoot /home/zz/data/www/visa-msk.ru
SuexecUserGroup visa-msk visa-msk
php_admin_value open_basedir .
.
AddType application/x-httpd-php .php .php3 .php4 .php5 .phtml
AddType application/x-httpd-php-source .phps
[/VirtualHost]

[VirtualHost 88.23.220.205:80]
ServerName test.ru
DocumentRoot /home/zz/data/www/test.ru
SuexecUserGroup test test
php_admin_value open_basedir .
.
AddType application/x-httpd-php .php .php3 .php4 .php5 .phtml
AddType application/x-httpd-php-source .phps
[/VirtualHost]

>[оверквотинг удален]
>>
>>Опишите, пожалуйста, что хотите добиться в конечном счете, так как сейчас написана
>>полная чушь с технической точки зрения.
>
>Есть выделенный сервер CentOS, к нему купленно и подключенно 5 IP адресов,
>есть 1 главный IP, если я буду использовать php функции (например
>file_get_content) для того чтобы взять что-либо с сети, php будет работать
>через этот главный адрес, но я хочу иметь возможность варьировать IP
>адресами (моя задача — парсинг с различныйх айпи), т.е. делать запросы
>как через прокси сервера. Надеюсь стало понятней.

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

5 . «Как заставить работать php через разные IP на одном сервере?» + / –
Сообщение от Vladin (ok) on 16-Фев-10, 01:33

>если выделенный серевер подними пару доменов на разных IP и все. все
>php функции на каждом сайте будут юзать отдельный IP.

Проверено ? Я сомневаюсь что будет так. Апач ип, на который приходит запрос, использует для определения виртуального хоста. А от апача запросы, по идее, должны уходить с ип интерфейса, выбранного роутингом как исходящий.

Как узнать IP-адрес посетителя через PHP

Один из самых частых вопросов, которые мне довелось слышать — это «как узнать IP-адрес посетителя через PHP«. Несмотря на всю простоту этой задачи, люди, тем не менее, это спрашивают. Как правило, это новички, которым PHP изучать не нужно, а нужен лишь какой-то скрипт, который будет выполнять определённую их задачу, в частности, узнавать IP-адрес посетителя. И в этой статье я этот код и дам.

Чтобы узнать IP-адрес посетителя сайта нужно написать всего лишь одну строку в скрипте:

Если Вы запустите этот скрипт, то узнаете свой IP-адрес. Как видите, всё просто! А в одной из следующих статей я расскажу, как узнать по IP-адресу, из какой страны пришёл человек на сайт.

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления


Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

Она выглядит вот так:

  • BB-код ссылки для форумов (например, можете поставить её в подписи):
  • Комментарии ( 9 ):

    Да так ты узнаешь IP НО как быть если у человека Динамический IP Ему просто стоит взять отключиться от нета а потом заново подключиться И у него уже будет новый IP Что посоветуешь в данной ситуации ?

    Так в чём вопрос?

    Вопрос в следующем как мне заблокировать на сайте одного плохого человека я решил сделать функцию которая будет блокировать человека с конкретным ip. Получилось но у него ip динамический и постоянно изменяется Ка быть? Есть предположения?

    Самый простой вариант — это блокировка по cookie. По IP блокировать бесполезно по причинам описанным Вами же. Так же можно блокировать всю подсеть, хотя не всегда динамический IP в одной подсети, плюс пострадают нормальные люди из его подсети.

    Спасибо хорошая идея Попробую может что-то выйдет

    Админ у меня на локальном ip выводит вот это ::1 когда пишу echo $_SERVER[«REMOTE_ADDR»];

    Получение IP-адреса с PHP для правильного отображения

    Я пытаюсь использовать время и IP адрес для создания уникального идентификатора для пользователей, когда они регистрируются на сайте. БД, которую я использую, MySQL и это идет с автоматическим увеличением, но это не похоже на практическую технику для этого. У меня проблемы с $_SERVER[‘REMOTE_ADDR’] возвращать нечитаемый адрес. Я получаю символы для значения в консоли Firebug. Я пытался с помощью inet_ntop а также inet_pton , ни сработало.

    Почему я получаю символы вместо читаемого текста?

    То, что я хочу сохранить, это комбинация IP и времени. Мне нужно, чтобы IP отображался в формате «79.104.97.105» -Niet the Dark Absol, но я получаю следующее: , если я использую inet_ntop или inet_pton или :: 1, если я использую только $ _SERVER [‘REMOTE_ADDR’].

    Вопрос из двух частей: 1) Получаю ли я IP-адрес как IPv6, если он возвращает :: 1, 2) Как преобразовать в 127.0.0.1, который я считаю IPv4?

    Решение

    inet_ntop() ожидает адрес в двоичном формате.

    Вам нужно использовать inet_pton() вместо этого, который ожидает IP для формата в $_SERVER[‘REMOTE_ADDR’] ,

    Обновить

    В вопросе вы утверждаете, что вам нужен адрес в удобочитаемом формате.

    Переменная уже содержит IP-адрес в удобочитаемом для человека формате, нет необходимости в какой-либо функции PHP для его преобразования.

    Другие решения

    Вы можете попробовать эту функцию:

    РЕДАКТИРОВАТЬ

    Этот вопрос может помочь вам, я думаю, что он имел ту же проблему: Должен ли MAMP возвращать :: 1 в качестве IP на localhost?

    Определение IP адреса

    Значение REMOTE_ADDR : 188.64.174.135
    HTTP заголовки, которые могут содержать информацию об IP адресе:
    HTTP_CLIENT_IP : не установлено
    HTTP_X_FORWARDED_FOR : не установлено
    HTTP_VIA : не установлено
    HTTP_X_REAL_IP : не установлено

    Беллетристика
    Один из самых дремучих вопросов в околопхпешном вебе — это определение IP адреса.
    Такого количества неправильного кода не написано, наверное, ни для какой другой операции.

    Каждый, кто в один прекрасный день узнаёт о существовании переменной HTTP_X_FORWARDED_FOR, тут же воображает себя мегагуру, и заменяет ей REMOTE_ADDR. Потом приходит знание о других переменных (X_REAL_IP, VIA, и ещё вагон и маленькая тележка), изобретаются многослойные мегаконструкции, изобретатели хвастаются друг перед другом их многоэтажностью и сравнивают свои творения с «кодом из PHPbb!».

    При этом спроси любого из них — «какой именно адрес они хотят определить?» — ни один не ответит: понимание основ функционирования сети TCP/IP среди пхп-программистов традиционно слабое.
    А вот стремление к нахождению Идеального и Единственно Правильного Решения — традиционно сильное.
    В результате вместо IP адреса в логи пишется не пойми что.

    К примеру, возьмем, казалось бы, простой вопрос «какой именно IP адрес (из цепочки хостов, через которые идет запрос от компьютера клиента к серверу) мы хотим записать в лог?». После того, как выяснилось, что большинство пхп-программистов затрудняются на него ответить, я и решил написать эту заметку.

    А это, между прочим, очень важный вопрос. Не ответив на него, наряду с вопросом «Зачем нам нужен IP адрес?», приступать к самому определению бессмысленно.
    При том, что большинству читателей этого текста вопросы покажутся бессмысленными.
    Ну что ж, попробуем разобраться.

    Теория
    Во-первых. Самые азы. Для тех, кто не знает.
    Все элементы массива $_SERVER, начинающиеся со слова «HTTP_» — это HTTP-заголовки.
    Как уже знают вдумчивые читатели фака на танке, HTTP заголовки присылает клиент. И прислать может любые.
    К примеру, заголовок X-All-Your-Base-Belongs-To-Us: Surrender!
    Или, как вы уже, наверное, догадались, заголовок X-Forwarded-For: admin durak
    Мне кажется, что записывать столь глубокомысленную строку вместо IP адреса — не самая лучшая идея.
    Как и вообще доверять любым переменным, начинающимся с HTTP. Это первое правило, которое надо запомнить с молоком матери: Любые элементы массива $_SERVER, начинающиеся с «HTTP_», можно использовать только в справочных целях! К примеру, HTTP_REFERER записываем, чтобы потом посмотреть. Но ни в коем случае не делаем на него Location.


    Во-вторых, определимся с тем, ДЛЯ ЧЕГО нам нужен IP адрес. Если мы хотим записать в лог, то пишем однозначно только REMOTE_ADDR. В этой переменной содержится реальный IP адрес реального хоста в интернете, который произвел соединение с нашим сервером. Единственный реальный адрес. Никаких других сервер не знает.
    Апач пишет в логи именно REMOTE_ADDR. Не надо считать авторов веб-сервера дурнее себя.

    Что значит — реальный IP адрес? А то и значит. Адрес хоста, который произвел соединение с нашим сервером. Этот адрес по определению может быть только один. Один, а не 5 по цепочке. Рассмотрим типичный пример:
    Есть пользовательский компьютер, который, который находится в офисной сети. IP компьютера 192.168.0.22
    Офисная сеть включена через роутер в сеть здания. IP роутера — 10.10.0.3
    Сеть здания, в свою очередь, подключена к интернету, через роутер. IP роутера — 77.88.22.11
    Пользователь заходит на сайт, через НТТР прокси. IP прокси — 212.121.0.8
    Так вот, сеть TCP/IP так устроена, что каждый следующий узел ничего не знает о предыдущих. Есть только пара хостов, которые соединяются друг с другом. В самих TCP/IP пакетах никакой информации о предыдущих хостах не предусмотрено.
    Поэтому, как это ни обидно, но реальным адресом мы можем считать только последний в цепочке — адрес HTTP прокси.

    Больше того. Ну допустим, узнали мы адрес компьютера пользователя (чем кичатся многие определители с помощью activeX и ява-апплетов). Этот адрес — 192.168.0.22. Он из приватной сети. Компьютеров с такими адресами в мире — миллионы. Найти компьютер по такому адресу — невозможно. Пользы от него — практически никакой. Практически, но не совсем. Почему? Слушаем дальше:

    Поскольку в протоколе HTTP текстовые заголовки, то в них можно добавить свой. Что некоторые хосты и делают. В те самые X-Forwarded-For, Via и прочие.
    Можем мы их использовать? Можем. Если правильно понимать — для чего.
    Для определения «реального IP адреса», как мы уже убедились — нельзя. А для чего же можно? Например — справки. просто записать, на всякий случай. НО! Только в том случае, если мы откажемся от дурацкой идеи найти один идеальный IP адрес. Если мы не будем писать вместо реального всякую лабуду, а будем записывать все похожее на IP адрес с реальным наряду, то почему нет?
    Итак, можно записать всё, похожее на IP адрес. Понадобится выявить злостного вредителя — возможно, какой-то интересный айпишник среди заголовков и проскочит.
    Для небольшого повышения надежности сессий — тоже можно. Писать в сессию не только реальный, но и все похожие. И все сверять. Хоть один не совпал — сессию рубим.
    И в других подобных случаях.
    Не забывая: реальный — отдельно, все похожее на IP адрес — отдельно.
    Не забывая: особо полагаться на все эти заголовки не стоит.

    Практика.
    Итак. Из всего вышеизложенного делается простой вывод.
    IP адрес в скрипте может быть только один. Лежит он в переменной REMOTE_ADDR.
    Следовательно, вожделенный код получания «идеального IP адреса» выглядит, как
    $ip = $_SERVER [ ‘REMOTE_ADDR’ ]
    Точка.

    Далее. Если мы хотим воспользоваться «заголовками, похожими на IP адрес» (лучше всего, во избежание недоразумений, совсем не считать их адресами хостов, а HTTP заголовками особого формата. Тем более, что никакого стандарта на содержимое заголовков X-Forwarded-For, Via и прочих — нет. Там могут оказаться IP адреса чарез запятую, или доменные имена или не через запятую. Не говоря уже о подделках!), то нет смысла судорожно искать все имена заголовков, где может встретиться адрес. Проще искать сами адреса.
    Берем, пишем простой код, который в цикле перебирает массив $_SERVER, и регулярным выражением выцепляет все заголовки, в которых встречается подхдящая под шаблон IP адреса строка. Если встретилась, то весь заголовок — с именем и всем содержимым — добавляем в массив или в строку. Которая хранится отдельно от IP адреса, в текстовом виде.
    Соответственно, в нужном месте повторяем операцию, и сверяем. IP адрес с IP адресом, строку похожих заголовков — со строкой похожих заголовков.
    function get_all_ip () <
    $ip_pattern = «#(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.)<3>(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)#» ;
    $ret = «» ;
    foreach ( $_SERVER as $k => $v ) <
    if ( substr ( $k , 0 , 5 )== «HTTP_» AND preg_match ( $ip_pattern , $v )) $ret .= $k . «: » . $v . «\n» ;
    >
    return $ret ;
    >
    Такой вот, несложный код.
    Правда, нужда в нем, если задуматься, очень невелика. Разве что, для тех же сессий. А для справки, про запас. не проще ли писать вообще все HTTP заголовки, пришедшие в скрипт? И это поинформативнее будет, чем выцеплять какой-то один адрес из HTTP_X_REAL_IP.
    Да и для сессий следует применять с осторожностью — IP адрес может оказаться, к примеру, в реферере.

    Примечания.
    Недавно я выяснил удивительную вещь. Оказывается, на свете существуют криворукие хостеры, у которых на сервере нет REMOTE_ADDR (а точнее есть, но в нем лежит. адрес самого сервера!). И пихают они адрес удаленного хоста кому куда бог на душу положит. Некоторые — вы будете смеяться — в HTTP_X_FORWARDED_FOR. Говорят, в некоторых больших программных продуктах есть даже специальная настройка для таких случаев — «Получать IP-адреса из заголовка X_FORWARDED_FOR».
    Разумеется, этот курьёз не опровергает сказанного выше, и не стоит кидаться писать автоматические определители IP с его учетом. Все подобные случаи должны разбираться только в ручном режиме, самим программистом. Который сначала убедится — где именно в HTTP_X_FORWARDED_FOR лежит нужный адрес — в начале цепочки запятых или в конце, напишет правильный рег, и только потом в настройки сайта добавит код
    $_SERVER[‘REMOTE_ADDR’]=get_ip_from_xff();

    Примечание для хостеров: mod_realip или mod_rpaf
    Примечание для пользователей: разумеется, таких хостеров надо избегать, как калёного железа. Наверняка ведь это не единственная их криворукость?

    Live-code.ru :: Блог программиста

    Живой код — создать и раскрутить сайт

    Рубрики

    Самое читаемое

    • Как раскрутить форум 57
    • О сайте 24
    • Выбираем лучший форум для сайтов Joomla 20
    • Проверенные способы защиты PHP 15
    • Профессиональный хостинг по доступным ценам 14

    Полезные ресурсы

    Последние комментарии

    Напишу скрипт бесплатно

    Сортировка массивов по возрастанию и убыванию в PHP

    Звезды блога ТОП 3

    • Введение в Ajax 10
    • Финансовый стриптиз за февраль 2012 10
    • Делаем скриншот сайта — PHP Скрипт 10

    Подробная информация о IP-адресе пользователя на PHP

    В данной статье мы рассмотрим один способ, как с помощью PHP и зарубежного ресурса узнать всю информацию о IP, в плоть до место жительство на карте.

    Данный способ может быть полезен при регистрации на сайте, администратор будет видеть из каких стран и городов к нему идут люди. Так-же можно использовать информацию о IP адресе в скрипте голосования и вывод последних голосов. Ну и в крайнем случае, если вы хотите пробить IP и узнать кто же этот негодяй который рассылает спам.

    Мы будем работать с:

    — Суперглобальным массивом $_SERVER

    PHP-интерпретатор хранит данные, полученные от сервера в массив $_SERVER. Из данного массива нам понадобится только IP $_SERVER[‘REMOTE_ADDR’]

    — Библиотека PHP Simple HTML DOM Parser (Скачать)

    1. Создаем файл ip-info.php в корень папки сайта

    2. В папке где находится файл php-info.php, создаем папку libs и распаковываем содержимое скачанного выше архива simplehtmldom.rar . У вас должно быть такая иерархия /libs/simplehtmldom


    В Файл ip-info.php добавляем текущие строки

    Хотите узнать, как накрутить вопросы на Аск ФМ илие жа лайки к своим ответам? В этом Вам поможет информативная статья на портале pricesmm.com. Здесь Вы найдете не только полезные советы о накрутке Аска, как платными, так и бесплатными методами, но и массу других фишек и лайфхаков по продвижению в социальных сетях.

    Заходим по адресу http://ваш-сайт.com/ip-info.php?ip=80.92.96.25

    получаем такую информацию:

    Как видим, все работает отлично!

    Если хотите получить данные о вашем IP, просто не ставьте ip в адресной строке.

    Широтe и Долготу, можно ввести в Google Maps и получить место нахождения человека на карте по его ip.

    Если будут вопросы или хотите дополнить, можете оставить их в комментариях ниже.

    Как в PHP узнать IP пользователя и определить его страну?

    В этой статье рассмотрим, как в PHP можно узнать IP клиента и сервера, а также разберём как зная IP клиента определить его страну и город.

    Как в PHP получить IP адрес посетителя сайта?

    Получить IP адрес клиента в PHP можно через суперглобальный массив $_SERVER . В этом массиве IP адрес посетителя доступен через ключ REMOTE_ADDR .

    Но, если клиент использует прокси-сервер, то значение $_SERVER[‘REMOTE_ADDR’] будет содержать IP последнего прокси-сервера, через который клиент попал на сайт.

    В этом случае, чтобы узнать IP посетителя можно попробовать использовать $_SERVER[‘HTTP_CLIENT_IP’] и $_SERVER[‘HTTP_X_FORWARDED_FOR’] . HTTP_CLIENT_IP и HTTP_X_FORWARDED_FOR – это заголовки, содержащие IP адрес пользователя. Данные заголовки устанавливает прокси-сервер. Обычно прокси-сервер устанавливает один из них. Данным в этих заголовках можно доверять, только если прокси-сервер надёжный. В противном случае, им доверять не стоит, т.к. их можно очень просто подделать. В этом случае лучше просто использовать $_SERVER[‘REMOTE_ADDR’] или сохранять в базу как $_SERVER[‘REMOTE_ADDR’] , так и заголовок, устанавливаемый прокси-сервером.

    Определение страны по ip с помощью Sypex Geo

    Основные шаги по созданию php скрипта, с помощью которого можно будет определять страну по ip:

    1. Скачаем Sypex Geo для PHP и базу данных стран. Sypex Geo распространяется по лицензии BSD, т.е. является абсолютно бесплатным.

    2. Распакуем архивы и загрузим на сервер файлы «SxGeo.php» и «SxGeo.dat». В качестве примера, создадим на сервере папку SxGeo и загрузим эти файлы в неё.

    3. Создадим свой скрипт, например, «get_country_code.php».

    4. Вставим в этот файл следующий код:

    5. Включим файл «get_country_code.php» в другие скрипты, в которых нужно реализовать выполнение кода в зависимости от принадлежности ip посетителя к той или иной стране.

    Определение города по ip с помощью Sypex Geo

    Для определения города, потребуется загрузить архив с базой данных городов для Sypex Geo, распаковать его и загрузить на сервер.

    Скрипт в этом случае будет следующий:

    Для автоматического обновления баз можно воспользоваться этим архивом. В этом архиве находится php скрипт. Этот скрипт необходимо настроить, т.е. указать в нём URL для скачивания базы и пути к файлам на сервере. После этого загрузить его на сервер и настроить его запуск по расписанию с помощью cron.

    Определение страны и города по ip через сервис через сервис ipstack

    Рассмотрим ещё один вариант определения в php местоположения по ip посетителя, но уже не через Sypex Geo, а с помощью сервиса ipstack.

    Сервис ipstack имеет бесплатный план, который позволяет обрабатывать до 10000 запросов в месяц.

    Для получения бесплатного плана нажимаем на кнопку «GET FREE API KEY» и переходим на страницу, на которой нужно заполнить регистрационную карточку.

    После регистрации, на личной странице ipstack вам будет назначен «API Access Key», который нужно скопировать. Он нам потребуется при создании php скрипта.

    Как в PHP получить IP адрес сервера?

    Узнать IP адрес сервера в PHP можно с помощью следующей инструкции:

    Пример реализации определения локации в CMS MODX

    В качестве примере рассмотрим, как в CMS MODX Revolution можно очень просто без сторонних сервисов осуществить определение страны посетителя. Разработаем решение на базе Sypex Geo.

    1. Для этого сначала нужно загрузить Sypex Geo в проект:

    Файл «SxGeo.php» – это основной скрипт, а «SxGeo.dat» – это база стран. Этих двух файлов достаточно для определения страны пользователя по его ip. Дополнительно в каталоге SxGeo ещё расположен файл «SxGeoCity.dat», данный файл в текущей реализации не нужен, он может потребовать, если в проекте потребуется определять не только страну пользователя, а ещё его регион и город.

    2. Создадим сниппет, например «get_location.php». В качестве примера организуем это с помощью файлов. Для этого нужно чтобы был установлен pdoTools и в настройках включена опция «Использовать Fenom на страницах».

    Код сниппета «get_location.php»:


    Поместим файл «get_location.php» в каталог /core/elements/snippets/ .

    Данный сниппет будет определять страну и помещать его код в плейсхолдер countrycode .

    3. После этого в нужных шаблонах поместим код вызова сниппета и сохранение значение плейсхолдера countrycode в переменную $country_code .

    Всё теперь чтобы написать логику достаточно использовать эту переменную.

    Выбор режима работы web-сервера на личном опыте

    Эта статья будет полезна тем людям, у которых уже есть свой сайт, или которые планируют его открыть. Особенно интересна статья будет амбициозно настроенным вебмастерам, которые чувствуют, что звездный час их проекта не за горами и хотят подготовиться к наплыву посетителей страницы.

    Даже те, кто пока только мечтают о тысячах пользователей на своём сайте, наверняка задавались вопросом: “А сколько же пользователей мой сайт выдержит, если они зайдут одновременно?” Сразу вспоминается известное выражение “Хабраэффект” – явление отказа сайта, который оказался не готов к многочисленным переходам на него после появления в интернете ссылки.

    Предположим, что сайт уже есть (или скоро будет): где же его разместить? Это должен быть классический хостинг или vps-сервер? Если vps, то какой и как его лучше настроить? А может быть вообще нет никакой разницы и проще выбрать то, что подешевле? В этой статье мы рассмотрим несколько вариантов и на практике убедимся, какой из них подойдёт лучше для нашего сайта.

    Будем экспериментировать: ставить разные режимы работы сервера и замерять производительность. Нагрузку на сайт будем имитировать с помощью сервиса Loaddy.com. Там можно задать количество пользователей, нарастающий тип нагрузки и по графику будет видно, как сервер реагирует на них. Считается, что один пользователь генерирует примерно один запрос к сайту в течение 10 секунд. В качестве испытуемого сайта возьмем демонстрационный интернет-магазин на cms moguta. Он будет заполнен тестовыми «товарами», которые выводятся на главную страницу по нескольким критериям (то есть при формировании страницы идет работа с базой данных и т.п.). Так или иначе, это позволит сравнивать режимы между собой.

    В качестве тестовой площадки создадим впс-сервер на ос Ubuntu. Конфигурация его будет [1 ядро, 1Gb RAM]. Будем считать, что именно такие серверы начального уровня создают в большинстве случаев для новых проектов. Тестовая версия интернет-магазина будет доступна по ip адресу http://130.193.44.219/

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

    Так как в большинстве случаев вместе с vps предлагается панель управления, основные изменения настроек будем производить в ней. На vps сервере нам доступно 3 режима его работы:

    • Apache;
    • Apache в режиме CGI;
    • Nginx + php-fpm (без Апача).

    Но сначала проведем испытания на хостинге:

    Классический недорогой хостинг

    Результат доступен по ссылке.

    Ошибки появляются, когда количество посетителей превышает 50 чел. Хостинг перестаёт отдавать контент, при этом, если зайти в панель управления хостингом, то мы можем увидеть примерно следующее:

    Ваш сайт подвергался ограничениям в течение последних 24 часов. Ресурсы процессора ограничивались для Вашего сайта. Вы достигали пределов по входным процессам (количеству одновременно запущенных PHP и CGI скриптов, заданий по расписанию и консольных сессий) 126 раз.

    Что ж, понятно, хостинг есть хостинг, тем более недорогой. Можно, конечно, найти такой тариф, который будет предоставлять больше возможностей, но это всё нужно учитывать, каким-то образом узнавать точные данные ограничений, причем у каждого хостинг-провайдера.

    VPS: Apache

    Следующий на очереди – наш тестовый впс с режимом апач, который кстати предлагается по умолчанию, при установке панели управления ISP.

    Результат доступен по ссылке.

    Проблемы начинаются, когда число пользователей переваливает за 90. Если мы зайдем на наш сервер по ssh и посмотрим в этот момент на список процессов по команде top, отсортированный с помощью Shift+M (по количеству потребляемой памяти), то увидим примерно такую картину:

    Мы видим, что процесс apache2 разросся на много дочерних и они съели всю оперативку нашего vps сервера.

    Здесь нужно сделать небольшую ремарку. Дело в том, что для сервера апач теоретически существует режим, который позволяет вместо этого большого числа дочерних процессов для каждого соединения создать несколько так называемых мультитредовых, каждый из которых обслуживал бы по нескольку соединений. Называется этот режим worker, в отличие от дефолтного prefork. Но установить его непросто, в панелях типа ISP это сделать невозможно, а если озадачиться и попытаться это осуществить через ssh, то выяснится, что для этого мало выключить prefork и включить worker, еще нужна тредобезопасная версия php. А если используются модули типа Zend или IonCube, то они тоже должны быть тредобезопасными. Да и вообще, официальный сайт PHP не рекомендует устанавливать этот режим.

    VPS: CGI

    Давайте посмотрим, что будет при использовании режима CGI. Для этого нужно в панели управления ISP разрешить использовать PHP в режиме CGI, это делается в разделе «Учетные записи – пользователи – настройки для пользователя».

    Результат доступен по ссылке.

    Безрадостная картина получилась. Сервер отказывается выдавать контент уже при 55+ посетителях, оперативная память вся съедена процессами “php”. Далее идёт попытка восстановления работоспособности, но всё равно всё оканчивается практически 100% отказами.

    VPS: Nginx + PHP-FPM

    Настало время режима, в котором сервер Apache не используется вовсе, вместо него работает Nginx, а php обрабатывается модулем php-fpm. Если вы используете панель управления ISP, то необходимо разрешить этот режим для пользователя. Это также делается в разделе «Учетные записи – пользователи – настройки для пользователя». Также этот режим должен быть доступен в разделе «Настройки – Возможности – Веб-сервер(www)».

    Результат доступен по ссылке.

    То, что нужно! 100% доступности, при этом скорость загрузки и время ответа сервера находятся на приемлемых уровнях, хоть и возрастают с ростом нагрузки. Тем не менее сервер справляется!

    Посмотрим на таблицу процессов в момент максимальной нагрузки на сервер:

    Мы видим, что у нас есть еще запас по доступной оперативной памяти. А дочерние процессы php-fpm7.0 не разрастаются в больших количествах, а ограничены 5-ю экземплярами, каждый из которых обслуживает несколько потоков.

    Что ж, похоже «режим-победитель» определен. Давайте выясним, сколько же одновременных посетителей сможет обслужить наш сервер в таком режиме. Но перед этим сделаем небольшой «тюнинг». Во-первых, так как apache не используется при такой работе сервера, его можно вовсе отключить. Это сделаем в панели управления ISP в разделе «Система – Службы». Во-вторых, изменим немного принцип запуска процессов php-fpm. По умолчанию он динамический. Это значит, что дочерние процессы будут висеть в памяти даже когда они не нужны. При этом память не освобождается и со временем эти процессы могут разрастись больше чем нам бы хотелось. Поэтому предлагается установить режим “ondemand” – по требованию. И задать количество дочерних процессов и время таймаута для них.

    Для этого нужно будет зайти на сервер по ssh и прописать эти настройки в конфигурационный файл php. Это удобно сделать в файле для пользователя, для которого был создан домен в ISP.

    Обычно он находится в /etc/php/7.0/fpm/pool.d

    Видим там по умолчанию такие настройки:


    Чтобы заработал режим ondemand, нужно заменить это на:

    И перезапустить php-fpm командой

    После этого процессы php-fpm7.0 будут создаваться по требованию (при наличии нагрузки), максимальное их количество будет =5, а после 10 секунд простоя процесс будет убиваться, освобождая оперативную память.

    На всякий случай, запустим наш тест еще раз, чтобы убедиться, что вся эта самодеятельность не повлияла в худшую сторону на производительность сайта:

    Результат доступен по ссылке.

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

    Результат доступен по ссылке.

    Радует то, что все запросы были обработаны, пусть и с большой задержкой, при большом их количестве в секунду. Время ответа сервера приближается к 10 секундам при количестве обращений 190+ Но давайте вспомним график режима apache, где 4 секунды ответа сервера мы получили уже при 80+ пользователях, тогда как в режиме php-fpm аналогичные лаги наблюдаются при 130 запросах, которые мы специально выделили курсором на графике выше.
    А ведь это тот же самый VPS.

    Таблица процессов top в конце испытания (при 200 пользователях):

    Заметим, что после окончания тестирования, память, используемая pfp-fpm освободилась:

    А значит наш сервер готов к новым нагрузкам.

    Необходимо помнить, что сайт работает в режиме nginx+php-fpm, это означает что в работе не используется apache2 и как следствие – не используется .htaccess. Это может казаться не удобным, но это самый быстрый из возможных вариантов, а поисковики лучше ранжируют сайты, которые работают быстро.

    Заключение

    В завершении еще один небольшой момент: Если вы настроили на сервере всё что хотели и решили отключить панель управления ISP, или у вас кончилась на неё лицензия, учтите, что процесс “core” от неё так и останется висеть у вас на сервере. По прошествии месяцев он может разрастись, так что лучше его “убить” и удалить из автозапуска и crona.

    PHP определение IP или откуда родом ваши пользователи

    Дата публикации: 2020-12-14

    От автора: в интернете ваше имя и фамилия ничего не значат. Здесь для определения юзера используется IP. Зная его, можно установить город и страну проживания человека, используемый браузер…. Не верите? Все это вы поймете, когда изучите в PHP определение IP.

    IP и не только

    Для получения сетевой информации пользователя в PHP существует глобальный массив $_SERVER. Давайте выведем его содержимое на экран:

    Как создать сайт самому?

    Какие технологии и знания необходимы сегодня, чтобы создавать сайты самостоятельно? Узнайте на интенсиве!

    Понятно, что искать конкретное значение в этом «великолепии» практически нереально, поэтому определение IP адреса PHP мы зададим более точно:

    Теперь мы знаем, что IP записывается в REMOTE_ADDR. Откуда она берется? Все эти данные клиент пересылает во время установки соединения. Эта переменная задается в настройках сервера на стороне клиента.

    Некоторые для определения города по IP в PHP используют значения HTTP-заголовков, но это в корне неверно. Любой пользователь может прописать значения заголовков для своего хоста. Также следует понимать, какой IP вам нужен. Например, значение HTTP_X_FORWARDED_FOR содержит адрес удаленного клиента, его прокси или может быть вообще пустым. Короче, тут разбираться не на один вечер хватит .

    Что касается браузера пользователя, то его можно попробовать определить с помощью функции get_browser (). Но для ее применения на стороне клиента в файле php.ini должен быть прописан путь к browscap.ini. Иначе получите подобное предупреждение:

    Узнаем страну юзера и не только

    Теперь с помощью PHP определим страну по IP. Но для начала проведем обзор всех решений в этой сфере. Большая часть подобных скриптов использует упомянутый нами элемент глобального массива $_SERVER REMOTE_ADDR. Теперь начинается самое главное.

    Можно использовать уже готовые библиотеки, в которых полученный IP просто сортируется в зависимости от своего значения. Надеюсь, для вас не является секретом, что это значение присваивается клиенту (хосту) в зависимости от его геолокации: страны, города и региона проживания пользователя. На анализе этих диапазонов и построен весь функционал.

    Также применяются различные сторонние сервисы наподобие ip-whois.net. С помощью скрипта вы передаете значение IP, а тот возвращает вам данные о нахождении хоста.

    Кроме этого часть специализированных библиотек поставляется со своей базой данной, в таблицах которых содержатся все рассортированные (по географии) диапазоны IP. Я не буду их перечислять. Таких в Сети сейчас хватает.

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

    Как получить IP-адрес клиента в PHP

    Как я могу получить IP-адрес клиента с помощью PHP?

    Я хочу сохранить запись пользователя, который вошел в мой сайт через его/ее IP-адрес.

    Независимо от того, что вы делаете, убедитесь, что вы не доверяете данным, отправленным с клиента. $_SERVER[‘REMOTE_ADDR’] содержит реальный IP-адрес соединительной стороны. Это самое надежное значение, которое вы можете найти.

    Однако они могут находиться за прокси-сервером, и в этом случае прокси-сервер может установить $_SERVER[‘HTTP_X_FORWARDED_FOR’] , но это значение легко подделать. Например, он может быть установлен кем-то без прокси, или IP может быть внутренним IP-адресом из локальной сети за прокси-сервером.

    Это означает, что если вы собираетесь сохранить $_SERVER[‘HTTP_X_FORWARDED_FOR’] , убедитесь, что вы также сохранили значение $_SERVER[‘REMOTE_ADDR’] . Например. сохраняя оба значения в разных полях в вашей базе данных.

    Если вы собираетесь сохранить IP-адрес в базу данных в виде строки, убедитесь, что у вас есть место, по крайней мере, 45 символов. IPv6 находится здесь, и эти адреса больше, чем старые адреса IPv4.

    (Обратите внимание, что IPv6 обычно использует не более 39 символов, но также существует специальная нотация IPv6 для IPv4-адресов, которая в полной форме может быть до 45 символов. Поэтому, если вы знаете, что делаете, вы можете использовать 39 символов, но если вы просто хотите установить и забыть, используйте 45).

    $_SERVER[‘REMOTE_ADDR’] может фактически не содержать реальных IP-адресов клиента, поскольку он даст вам прокси-адрес для клиентов, подключенных через прокси-сервер, например. Это может но, быть может, вы действительно хотите, в зависимости от того, что вы делаете с IP-адресами. Кто-то частный адрес RFC1918 может не принести вам никакого пользы, если вы скажете, пытаясь узнать, откуда происходит ваш трафик, или помните, какой IP-адрес был последним подключен к пользователю, где общий IP-адрес прокси-сервера или шлюза NAT может быть больше подходящий для хранения.

    Существует несколько HTTP-заголовков, таких как X-Forwarded-For , которые могут устанавливаться или не устанавливаться различными прокси-серверами. Проблема в том, что это просто HTTP-заголовки, которые могут быть установлены кем угодно. Там нет гарантии их содержания. $_SERVER[‘REMOTE_ADDR’] — это фактический физический IP-адрес, на который веб-сервер получил соединение и ответ будет отправлен. Все остальное — это произвольная и добровольная информация. Есть только один сценарий, в котором вы можете доверять этой информации: вы контролируете прокси-сервер, который устанавливает этот заголовок. Значение только в том случае, если вы знаете 100%, где и как был настроен заголовок, если вы прислушаетесь к нему для чего-то важного.

    Сказав это, здесь приведен пример кода:

    Примечание редактора: Использование приведенного кода имеет последствия для безопасности. Клиент может установить всю информацию заголовка HTTP (т.е. $_SERVER[‘HTTP_. ) на любое произвольное значение, которое он хочет. Таким образом, гораздо более надежно использовать $_SERVER[‘REMOTE_ADDR’] , поскольку пользователь не может установить его.

    ip адрес клиента в php

    Часто пользователь желает через PHP узнать IP-адрес посетителя. Сделать это совсем несложно — для этого необязательно изучать PHP. Достаточно наличие определенного скрипта, который и будет представлен в данной статье.

    Итак, строка в скрипте, которая необходима для того, чтобы выяснить IP-адрес, выглядит следующим образом:

    Данному пользователю покажут его IP. Примерно так: Ваш IP: 321.33.111.222

    Также вы можете составить скрипт, с помощью которого админ-панель будет доступна исключительно администратору сайта, однако подойдет он только владельцам постоянных IP-адресов. Чтобы этого добиться, вставьте в начало .php файлов следующий код:

    Илон Маск рекомендует:  Что такое код asp status
    Понравилась статья? Поделиться с друзьями:
    Кодинг, CSS и SQL