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

Для определения IP клиента на я использую один из этих примеров.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
<?
function getIp()
{
	global $REMOTE_ADDR;
	global $HTTP_X_FORWARDED_FOR, $HTTP_X_FORWARDED, $HTTP_FORWARDED_FOR, $HTTP_FORWARDED;
	global $HTTP_VIA, $HTTP_X_COMING_FROM, $HTTP_COMING_FROM;
	global $HTTP_SERVER_VARS, $HTTP_ENV_VARS;
 
	// Get some server/environment variables values
	if (empty($REMOTE_ADDR)) {
		if (!empty($_SERVER) && isset($_SERVER['REMOTE_ADDR'])) {
			$REMOTE_ADDR = $_SERVER['REMOTE_ADDR'];
		}
		else if (!empty($_ENV) && isset($_ENV['REMOTE_ADDR'])) {
			$REMOTE_ADDR = $_ENV['REMOTE_ADDR'];
		}
		else if (!empty($HTTP_SERVER_VARS) && isset($HTTP_SERVER_VARS['REMOTE_ADDR'])) {
			$REMOTE_ADDR = $HTTP_SERVER_VARS['REMOTE_ADDR'];
		}
		else if (!empty($HTTP_ENV_VARS) && isset($HTTP_ENV_VARS['REMOTE_ADDR'])) {
			$REMOTE_ADDR = $HTTP_ENV_VARS['REMOTE_ADDR'];
		}
		else if (@getenv('REMOTE_ADDR')) {
			$REMOTE_ADDR = getenv('REMOTE_ADDR');
		}
	} // end if
 
	if (empty($HTTP_X_FORWARDED_FOR)) {
		if (!empty($_SERVER) && isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
			$HTTP_X_FORWARDED_FOR = $_SERVER['HTTP_X_FORWARDED_FOR'];
		}
		else if (!empty($_ENV) && isset($_ENV['HTTP_X_FORWARDED_FOR'])) {
			$HTTP_X_FORWARDED_FOR = $_ENV['HTTP_X_FORWARDED_FOR'];
		}
		else if (!empty($HTTP_SERVER_VARS) && isset($HTTP_SERVER_VARS['HTTP_X_FORWARDED_FOR'])) {
			$HTTP_X_FORWARDED_FOR = $HTTP_SERVER_VARS['HTTP_X_FORWARDED_FOR'];
		}
		else if (!empty($HTTP_ENV_VARS) && isset($HTTP_ENV_VARS['HTTP_X_FORWARDED_FOR'])) {
			$HTTP_X_FORWARDED_FOR = $HTTP_ENV_VARS['HTTP_X_FORWARDED_FOR'];
		}
		else if (@getenv('HTTP_X_FORWARDED_FOR')) {
			$HTTP_X_FORWARDED_FOR = getenv('HTTP_X_FORWARDED_FOR');
		}
	} // end if
 
	if (empty($HTTP_X_FORWARDED)) {
		if (!empty($_SERVER) && isset($_SERVER['HTTP_X_FORWARDED'])) {
			$HTTP_X_FORWARDED = $_SERVER['HTTP_X_FORWARDED'];
		}
		else if (!empty($_ENV) && isset($_ENV['HTTP_X_FORWARDED'])) {
			$HTTP_X_FORWARDED = $_ENV['HTTP_X_FORWARDED'];
		}
		else if (!empty($HTTP_SERVER_VARS) && isset($HTTP_SERVER_VARS['HTTP_X_FORWARDED'])) {
			$HTTP_X_FORWARDED = $HTTP_SERVER_VARS['HTTP_X_FORWARDED'];
		}
		else if (!empty($HTTP_ENV_VARS) && isset($HTTP_ENV_VARS['HTTP_X_FORWARDED'])) {
			$HTTP_X_FORWARDED = $HTTP_ENV_VARS['HTTP_X_FORWARDED'];
		}
		else if (@getenv('HTTP_X_FORWARDED')) {
			$HTTP_X_FORWARDED = getenv('HTTP_X_FORWARDED');
		}
	} // end if
 
	if (empty($HTTP_FORWARDED_FOR)) {
		if (!empty($_SERVER) && isset($_SERVER['HTTP_FORWARDED_FOR'])) {
			$HTTP_FORWARDED_FOR = $_SERVER['HTTP_FORWARDED_FOR'];
		}
		else if (!empty($_ENV) && isset($_ENV['HTTP_FORWARDED_FOR'])) {
			$HTTP_FORWARDED_FOR = $_ENV['HTTP_FORWARDED_FOR'];
		}
		else if (!empty($HTTP_SERVER_VARS) && isset($HTTP_SERVER_VARS['HTTP_FORWARDED_FOR'])) {
			$HTTP_FORWARDED_FOR = $HTTP_SERVER_VARS['HTTP_FORWARDED_FOR'];
		}
		else if (!empty($HTTP_ENV_VARS) && isset($HTTP_ENV_VARS['HTTP_FORWARDED_FOR'])) {
			$HTTP_FORWARDED_FOR = $HTTP_ENV_VARS['HTTP_FORWARDED_FOR'];
		}
		else if (@getenv('HTTP_FORWARDED_FOR')) {
			$HTTP_FORWARDED_FOR = getenv('HTTP_FORWARDED_FOR');
		}
	} // end if
 
	if (empty($HTTP_FORWARDED)) {
		if (!empty($_SERVER) && isset($_SERVER['HTTP_FORWARDED'])) {
			$HTTP_FORWARDED = $_SERVER['HTTP_FORWARDED'];
		}
		else if (!empty($_ENV) && isset($_ENV['HTTP_FORWARDED'])) {
			$HTTP_FORWARDED = $_ENV['HTTP_FORWARDED'];
		}
		else if (!empty($HTTP_SERVER_VARS) && isset($HTTP_SERVER_VARS['HTTP_FORWARDED'])) {
			$HTTP_FORWARDED = $HTTP_SERVER_VARS['HTTP_FORWARDED'];
		}
		else if (!empty($HTTP_ENV_VARS) && isset($HTTP_ENV_VARS['HTTP_FORWARDED'])) {
			$HTTP_FORWARDED = $HTTP_ENV_VARS['HTTP_FORWARDED'];
		}
		else if (@getenv('HTTP_FORWARDED')) {
			$HTTP_FORWARDED = getenv('HTTP_FORWARDED');
		}
	} // end if
 
	if (empty($HTTP_VIA)) {
		if (!empty($_SERVER) && isset($_SERVER['HTTP_VIA'])) {
			$HTTP_VIA = $_SERVER['HTTP_VIA'];
		}
		else if (!empty($_ENV) && isset($_ENV['HTTP_VIA'])) {
			$HTTP_VIA = $_ENV['HTTP_VIA'];
		}
		else if (!empty($HTTP_SERVER_VARS) && isset($HTTP_SERVER_VARS['HTTP_VIA'])) {
			$HTTP_VIA = $HTTP_SERVER_VARS['HTTP_VIA'];
		}
		else if (!empty($HTTP_ENV_VARS) && isset($HTTP_ENV_VARS['HTTP_VIA'])) {
			$HTTP_VIA = $HTTP_ENV_VARS['HTTP_VIA'];
		}
		else if (@getenv('HTTP_VIA')) {
			$HTTP_VIA = getenv('HTTP_VIA');
		}
	} // end if
 
	if (empty($HTTP_X_COMING_FROM)) {
		if (!empty($_SERVER) && isset($_SERVER['HTTP_X_COMING_FROM'])) {
			$HTTP_X_COMING_FROM = $_SERVER['HTTP_X_COMING_FROM'];
		}
		else if (!empty($_ENV) && isset($_ENV['HTTP_X_COMING_FROM'])) {
			$HTTP_X_COMING_FROM = $_ENV['HTTP_X_COMING_FROM'];
		}
		else if (!empty($HTTP_SERVER_VARS) && isset($HTTP_SERVER_VARS['HTTP_X_COMING_FROM'])) {
			$HTTP_X_COMING_FROM = $HTTP_SERVER_VARS['HTTP_X_COMING_FROM'];
		}
		else if (!empty($HTTP_ENV_VARS) && isset($HTTP_ENV_VARS['HTTP_X_COMING_FROM'])) {
			$HTTP_X_COMING_FROM = $HTTP_ENV_VARS['HTTP_X_COMING_FROM'];
		}
		else if (@getenv('HTTP_X_COMING_FROM')) {
			$HTTP_X_COMING_FROM = getenv('HTTP_X_COMING_FROM');
		}
	} // end if
 
	if (empty($HTTP_COMING_FROM)) {
		if (!empty($_SERVER) && isset($_SERVER['HTTP_COMING_FROM'])) {
			$HTTP_COMING_FROM = $_SERVER['HTTP_COMING_FROM'];
		}
		else if (!empty($_ENV) && isset($_ENV['HTTP_COMING_FROM'])) {
			$HTTP_COMING_FROM = $_ENV['HTTP_COMING_FROM'];
		}
		else if (!empty($HTTP_COMING_FROM) && isset($HTTP_SERVER_VARS['HTTP_COMING_FROM'])) {
			$HTTP_COMING_FROM = $HTTP_SERVER_VARS['HTTP_COMING_FROM'];
		}
		else if (!empty($HTTP_ENV_VARS) && isset($HTTP_ENV_VARS['HTTP_COMING_FROM'])) {
			$HTTP_COMING_FROM = $HTTP_ENV_VARS['HTTP_COMING_FROM'];
		}
		else if (@getenv('HTTP_COMING_FROM')) {
			$HTTP_COMING_FROM = getenv('HTTP_COMING_FROM');
		}
	} // end if
 
	// Gets the default ip sent by the user
	if (!empty($REMOTE_ADDR)) {
		$direct_ip = $REMOTE_ADDR;
	}
 
	// Gets the proxy ip sent by the user
	$proxy_ip = '';
	if (!empty($HTTP_X_FORWARDED_FOR)) {
		$proxy_ip = $HTTP_X_FORWARDED_FOR;
	} else if (!empty($HTTP_X_FORWARDED)) {
		$proxy_ip = $HTTP_X_FORWARDED;
	} else if (!empty($HTTP_FORWARDED_FOR)) {
		$proxy_ip = $HTTP_FORWARDED_FOR;
	} else if (!empty($HTTP_FORWARDED)) {
		$proxy_ip = $HTTP_FORWARDED;
	} else if (!empty($HTTP_VIA)) {
		$proxy_ip = $HTTP_VIA;
	} else if (!empty($HTTP_X_COMING_FROM)) {
		$proxy_ip = $HTTP_X_COMING_FROM;
	} else if (!empty($HTTP_COMING_FROM)) {
		$proxy_ip = $HTTP_COMING_FROM;
	} // end if... else if...
 
	// Returns the true IP if it has been found, else FALSE
	if (empty($proxy_ip)) {
		// True IP without proxy
		return $direct_ip;
	} else {
		$is_ip = ereg('^([0-9]{1,3}\.){3,3}[0-9]{1,3}', $proxy_ip, $regs);
		if ($is_ip && (count($regs) > 0)) {
		// True IP behind a proxy
		return $regs[0];
		} else {
			// Can't define IP: there is a proxy but we don't have
			// information about the true IP
			return FALSE;
		}
	} // end if... else...
 
} // end of the 'getIp()' function
 
echo getIp();
 
?>

или вот так

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
<?
function validip($ip) {
	if (!empty($ip) && ip2long($ip)!=-1) {
		$reserved_ips = array (
			array('0.0.0.0','2.255.255.255'),
			array('10.0.0.0','10.255.255.255'),
			array('127.0.0.0','127.255.255.255'),
			array('169.254.0.0','169.254.255.255'),
			array('172.16.0.0','172.31.255.255'),
			array('192.0.2.0','192.0.2.255'),
			array('192.168.0.0','192.168.255.255'),
			array('255.255.255.0','255.255.255.255')
		);
 
		foreach ($reserved_ips as $r) {
			$min = ip2long($r[0]);
			$max = ip2long($r[1]);
			if ((ip2long($ip) >= $min) && (ip2long($ip) <= $max)) return false;
		}
 
		return true;
 
	} else {
		return false;
	}
} 
 
function getip() {
	if (validip(@$_SERVER["HTTP_CLIENT_IP"])) {
		return $_SERVER["HTTP_CLIENT_IP"];
	}
 
	foreach (explode(",",@$_SERVER["HTTP_X_FORWARDED_FOR"]) as $ip) {
		if (validip(trim($ip))) { return $ip; }
	}
 
	if (validip(@$_SERVER["HTTP_X_FORWARDED"])) {
		return $_SERVER["HTTP_X_FORWARDED"];
	} elseif (validip(@$_SERVER["HTTP_FORWARDED_FOR"])) {
		return $_SERVER["HTTP_FORWARDED_FOR"];
	} elseif (validip(@$_SERVER["HTTP_FORWARDED"])) {
		return $_SERVER["HTTP_FORWARDED"];
	} elseif (validip(@$_SERVER["HTTP_X_FORWARDED"])) {
		return $_SERVER["HTTP_X_FORWARDED"];
	} else {
		return $_SERVER["REMOTE_ADDR"];
	}
} 
 
echo getip();
 
?>

HTML как PHP

Только что столкнулся с интересным моментом на хостинге fastvps.ru
Надо было заставить html работать как . Но стандартный код в . не сработал.

Там где PHP как модуль

1
AddType application/x-httpd-php .html .htm

Для хостингов с PHP как CGI:

1
AddHandler application/x-httpd-php .html .htm

Для того чтобы заставить работать html как php пришлось добавить следующее:

1
2
3
4
FCGIWrapper /путь до php/php .html
FCGIWrapper /путь до php/php .htm 
FCGIWrapper /путь до php/php .php
AddHandler fcgid-script .php .html .htm

regexp для проверки email

Небольшая регулярка для проверки валидности email.

Под катом код соовсетствующий RFC822.

Читать полностью >>> regexp для проверки email…

Проблема загруки больших файлов

Это будет не решение, а описание проблемы.
Собственно суть проблемы такова: есть хостинг, на нем стоит , также имеется , я хочу загрузить файл через HTML форму.
Файлы которые меньше разрешеного лимита PHP загружаются отлично, а те которые больше… Вот тут как раз и возникает проблема. Они грузятся до определенного момента и соединение рвется сервером. Причем без всяких ошибок.
Логирование ошибок в PHP включено, но там тишина, в логах апача тишина.
Как хотелось бы: чтобы сервер при загрузке больших файлов хоть какую-то ошибку вернул. Тогда бы я ее отловил и показал пользователю сообщение о невозможности загрузить этот файл.
Подскажите, куда копать?

P.S. Места на диске полно. В HTML форме max_file_size указан.

Глобальные и волшебные константы PHP

Достаточно часто пишу код, применяя такоие вот волшебные , в основном применяю их для отладки.

  • __LINE__ Текущий номер строки в файле.
  • __FILE__ Полный путь и имя текущего файла. Если используется внутри подключаемого файла, то возвращается имя данного файла. Начиная с версии 4.0.2, __FILE__ всегда содержит абсолютный путь с разрешенными символическими ссылками, тогда как в старых версиях в некоторых обстоятельствах возвращался относительный путь.
  • __DIR__ Директория файла. Если используется внутри подключаемого файла, то возвращается директория этого файла. Это эквивалентно вызову dirname(__FILE__). Возвращаемое имя директории не оканчивается на слэш, за исключением корневой директории (добавлена в PHP 5.3.0.)
  • __FUNCTION__ Имя функции. (Добавлена в PHP 4.3.0.) Начиная с PHP 5 эта константа возвращает имя функции точно так, как оно было объявлено (с учетом регистра). В PHP 4 это значение всегда было в нижнем регистре.
  • __CLASS__ Имя класса. (Добавлена в PHP 4.3.0.) Начиная с PHP 5 эта константа возвращает имя класса точно так, как оно было объявлено (с учетом регистра). В PHP 4 это значение всегда было в нижнем регистре.
  • __METHOD__ Имя метода класса. (Добавлена в PHP 5.0.0) Имя метода возвращается так, как оно было объявлено (с учетом регистра).
  • __NAMESPACE__ Имя текущего пространства имен (с учетом регистра). Эта константа определяется во время компиляции (Добавлена в версии PHP 5.3.0).

Под катом некоторые глобальные константы и небольшие сниппеты.

Читать полностью >>> Глобальные и волшебные константы PHP…

Бесконечный скроллинг как в Facebook и Twitter

Многие из нас видели эту бесконечную прокрутку на веб-сайтах, как и , где новые сообщения загружаются, когда мы достигаем конца самой страницы. Нам не нужно нажмать на ссылку чтобы загрузить еще немного новых постов или сообщений. В этом посте я рассмотрю теорию и практику с применением , и … хотя только практику =)

Читать полностью >>> Бесконечный скроллинг как в Facebook и Twitter…

HTTP Authentication с PHP как FastCGI/SuExec

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

У меня случилась интересная ситуация, мой постоянно выдавал форму ввода лоина и пароля при HTTP авторизации. Я никак не мог понять в чем дело. Оказалось все просто. Плохая новость в том, что этот тип авторизации не работает, если ваш PHP установлен ​​и работает как . Он отлично работает, когда PHP установлен как модуль.

Хотя… Решение довольно не тривиальное.

Читать полностью >>> HTTP Authentication с PHP как FastCGI/SuExec…

Склеить и разрезать большие файлы на php

Сегодня появилась задачка. Склеить большие в один. А потом разрезать пофайлово.
Под катом исходники упаковщика (архиватора) на и распаковщика.

Читать полностью >>> Склеить и разрезать большие файлы на php…

E_ERROR timeout exception перехват в php

Отличный пример нашел у http://insomanic.me.uk/post/229851073/php-trick-catching-fatal-errors-e-error-with-a.

Спешу поделится.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
set_time_limit(3);
set_error_handler('myErrorHandler');
register_shutdown_function('fatalErrorShutdownHandler');
function myErrorHandler($code, $message, $file, $line) {
echo "ok";
lambda();
}
function fatalErrorShutdownHandler()
{
$last_error = error_get_last();
if ($last_error['type'] === E_ERROR) {
// fatal error
myErrorHandler(E_ERROR, $last_error['message'], $last_error['file'], $last_error['line']);
}
}
function lambda() {
error_reporting(0);
for($x=0;$x&lt;=10000000;$x++) { md5($x); }
error_reporting(-1);
}
lambda();

Скачать видео Вконтакте

Написал небольшой скриптик, как скачать .

Смотрите, критикуйте ССЫЛКА

2 pages

ITeye.ru
Подпишись на RSS или читай комментарии.