Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > как сделать на php


Автор: Rostik Ultra 12.5.2008, 18:23
как в php определяется
- ip сайта
- гео принадлежность ip

Автор: Letov 12.5.2008, 18:43
IP любого сайта (www.yoursite.ru - адрес сайта):
Код

$ip=gethostbyname("www.yoursite.ru");

IP сервера, на котором запущен скрипт
Код

$ip=gethostbyname($_SERVER['HTTP_HOST']);


Справка по функциям:
gethostbyname
Возвращает IP-адрес хоста. 
Синтаксис: 
Код

string gethostbyname(string hostname);

Функция gethostbyname() получает в параметрах доменное имя хоста и возвращает его IP-адрес. Если адрес определить не удалось, функция возвращает hostname.

gethostbynamel

Возвращает список IP-адресов хоста. 
Синтаксис: 
Код

array gethostbynamel(string hostname);

Одному доменному имени может соответствовать сразу несколько IP-адресов, и в случае сильной загруженности серверов DNS-сервер сам выбирает, по какому IP-адресу перенаправить запрос. Он выбирает тот адрес, который использовался наиболее редко. 
Функция gethostbynamel() возвращает не один, а все IP-адреса хоста с именем hostname. 
Стоит заметить, что в Интернете существует множество виртуальных хостов, которые имеют различные доменные имена, но один и тот же IP-адресс. Таким образом, если следующая последовательность команд для существующего хоста с IP-адресом ip всегда печатает этот же адрес: 
Код

$host = gethostbyaddr($ip);
echo gethostbyname($host);

то аналогичная последовательность для домена с DNS-именем $host, наоборот, может напечатать не то же имя, а другое: 
Код

$ip = gethostbyname($host);
echo gethostbyaddr($ip);

Автор: Rostik Ultra 12.5.2008, 19:19
Letov, спасибо за подробный ответ особенно за выдержки из php.net которые можно найти самому

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

офтоп - а чтобы получать коды ошибок сервера (типа 301, 403, 404) нужно использовать get_headers ? или есть отдельная функция которая возвращает ответ ввиде единственной цифры - номера ошибки

Автор: Letov 12.5.2008, 19:25
Для того чтобы узнать гео принадлежность используй сервисы WhoIS и сокеты php.


По второму вопросу:

get_headers

(PHP 5)

get_headers — Возвращает заголовки из ответа сервера на HTTP-запрос
Описание
Код

array get_headers ( string $url [, int $format ] )


get_headers() возвращает массив с заголовками из ответа сервера на HTTP-запрос. 

Список параметров
url

Целевой URL. 
format 

Если необязательный параметр format установлен в 1, get_headers() разберет ответ сервера и установит ключи для возвращаемого массива. 

Возвращаемые значения
Возвращает список или ассоциативный массив с заголовками ответа при нормальном завершении и FALSE, если возникла ошибка. 
Код

Список изменений
Версия    Описание
5.1.3    Эта функция теперь использует stream context по-умолчанию, который может быть установлен или изменен при помощи функции stream_context_get_default(). 


Примеры

Пример #1 Пример использования get_headers()
Код

<?php
$url = 'http://www.example.com';

print_r(get_headers($url));

print_r(get_headers($url, 1));
?> 


Результатом выполнения данного примера будет что-то подобное:
Код

Array
(
    [0] => HTTP/1.1 200 OK
    [1] => Date: Sat, 29 May 2004 12:28:13 GMT
    [2] => Server: Apache/1.3.27 (Unix)  (Red-Hat/Linux)
    [3] => Last-Modified: Wed, 08 Jan 2003 23:11:55 GMT
    [4] => ETag: "3f80f-1b6-3e1cb03b"
    [5] => Accept-Ranges: bytes
    [6] => Content-Length: 438
    [7] => Connection: close
    [8] => Content-Type: text/html
)

Array
(
    [0] => HTTP/1.1 200 OK
    [Date] => Sat, 29 May 2004 12:28:14 GMT
    [Server] => Apache/1.3.27 (Unix)  (Red-Hat/Linux)
    [Last-Modified] => Wed, 08 Jan 2003 23:11:55 GMT
    [ETag] => "3f80f-1b6-3e1cb03b"
    [Accept-Ranges] => bytes
    [Content-Length] => 438
    [Connection] => close
    [Content-Type] => text/html
)


Элемент [0] и содержит код ошибки сервера.

Вот коды ошибок сервера:
Код

100-199 Информационные. Сообщает агенту что запрос агента принят и обрабатывается
100 - Continue - начальная часть запроса принята, и клиент может продолжать передачу запроса
101 - Switching Protocols - сервер выполняет требование клиента и переключает протоколы в соответствии с указанием, данным в поле заголовка Upgrade

200-299 Запрос агента обработан успешно, сервер отправил клиенту запрашиваемый документ
200 - OK - запрос клиента обработан успешно и ответ сервера содержит затребованные данные
201 - Created - этот код состояния используется в случае создания нового URI. Вместе с этим кодом результата сервер выдает заголовок Location, который содержит информацию о том, куда были помещены новые данные
202 - Accepted - запрос принят, но обрабатывается не сразу. В теле содержимого ответа сервера может быть дана дополнительная информация о данной транзакции. Гарантии того, что сервер в конечном итоге удовлетворит запрос, нет, даже несмотря на то, что на момент приема запрос выглядел допустимым
203 - Non-Authoritative Information - информация в заголовке содержимого взята из локальной копии или у третьей стороны, а не с исходного сервера
204 - No Content - ответ содержит код состояния и заголовок, но тело содержимого отсутствует. При получении этого ответа браузер не должен обновлять свой документ. Обработчик чувствительных областей изображений может возвращать этот код, когда пользователь щелкает на бесполезных или пустых участках изображения
205 - Reset Content - браузер должен очистить форму, используемую в данной транзакции, для дополнительных входных данных. Полезен для CGI-приложений, требующих ввода данных
206 - Partial Content - сервер возвращает лишь часть данных затребованного объема. Используется в ответе на запрос с указанием заголовка Range. Сервер должен указать диапазон, включенный в ответ, в заголовке Content-Range

300-399 Запрос агента изменен и агенту нужно предпринять некоторые действия для удовлетворения измененного запроса
300 - Multiple Choices - затребованный URI обозначает более одного ресурса. Например, URI может обозначать документ, переведенный на несколько языков. В теле содержимого, возвращенном сервером, может находиться перечень более конкретных данных о том, как выбрать ресурс правильно
301 - Moved Permanently - затребованный URI уже не используется сервером, и указанная в запросе операция не выполнена. Новое местонахождение затребованного документа указывается в заголовке Location (см. настройки файла .htaccess). Во всех последующих запросах данного документа следует указывать новый URI
302 - Moved Temporarily - затребованный URI перемешен, но лишь временно. Заголовок Location указывает на новое местонахождение. Сразу же после получения этого кода состояния клиент должен разрешить запрос при помощи нового URI (см. настройки файла .htaccess), но во всех последующих запросах необходимо пользоваться старым URI
303 - See Other - затребованный URI можно найти по другому URI, указанному в заголовке Location (см. настройки файла .htaccess). Его следует выбрать методом GET по данному ресурсу
304 - Not Modified - это код ответа на заголовок lf-Modified-Since, если URI не изменялся с указанной даты. Тело содержимого не посылается, и клиент должен использовать свою локальную копию
305 - Use Proxy - доступ к затребованному URI должен осуществляться через proxy-сервер, указанный в заголовке Location

400-499 Проблемы при попытке выполнить запрос
400 - Bad Request - сервер не понял запрос
401 - Unauthorized - не установлена подлинность пользователя. Ответ включает заголовок WWW-Authenticate, который содержит вызов к ресурсу запроса
402 - Payment Required - не используется в данное время
403 - Forbidden - сервер не имеет возможности ответа и запрос отклонён
404 - Not Found - по данному адресу ресурса нет
405 - Method Not Allowed - метод запроса для данного адреса не предусмотрен
406 - Not Acceptable - в запросе нет согласованных с ответом объектов содержимого
407 - Proxy Authentication Required - необходимо установить подлинность клиента. Используются Proxy-Authorization и Proxy-Authenticate
408 - Request Timeout - запрос не был произведён в установленое сервером время
409 - Conflict - произошёл конфликт между запросом и состоянием ресурса в данный момент
410 - Gone - ресурс удалён навсегда
411 - Length Required - сервер не принимает запрос с неуказанным Content-Length. Необходимо указать корректный Content-Length в заголовке запроса
412 - Precondition Failed - сервер отказывается обработать запрос из-за превышения лимита его объёма
413 - Request Entity Too Large - сервер не обработает запрос по причине его большого объёма
414 - Request-URI Too Long - запрашиваемый адрес превышает максимальную длину
415 - Unsupported Media Type - объект запроса имеет формат отличный от формата запроса
416 - Requested Range Not Satisfiable - форма запроса (требуемый диапазон) не выполнима
417 - Expectation Failed - время ожидания истекло

500-599 Ошибки сервера
500 - Internal Server Error - в процессе обработки запроса произошёл внутренний сбой на сервере
501 - Not Implemented - запрашиваемая клиентом функция не поддерживается сервером или сервер не может распознать метод запроса
502 - Bad Gateway - произошёл сбой на сервере, который используется в качестве шлюза
503 - Service Unavailable - в данный момент какая-либо из служб сервера недоступна
504 - Gateway Timeout - шлюз превысил максимальный лимит отведённого времени
505 - HTTP Version Not Supported - версия HTTP, указанная в запросе, не поддерживается сервером

Автор: Rostik Ultra 12.5.2008, 19:54
Letov я это и без тебя уже прочитал ... я спросил есть отдельная функция которая возвращает только номер ошибки или нет ... или тогда парсить результаты get_headers ? ну судя по твоему ответу - get_headers

Автор: source777 12.5.2008, 23:15
Цитата(Rostik Ultra @  12.5.2008,  19:19 Найти цитируемый пост)
теперь надо узнать как определять гео принадлежность
1) Есть сайты, предоставляющие свои БД(IP->город) к использованию: например, http://www.geodb.ru, http://ipgeo-base.ru/

2) А есть расширение для РНР: качать http://pecl.php.net/package/geoip, читать как юзать http://php.mirror.camelnetwork.com/manual/ru/book.geoip.php smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)