(未整理....)
(1)php cli方式下擷取伺服器ip
[php]
function getServerIp(){
$ss = exec(‘/sbin/ifconfig eth0 | sed -n \‘s/^ *.*addr:\\([0-9.]\\{7,\\}\\) .*$/\\1/p\‘‘,$arr);
$ret = $arr[0];
return $ret;
}
function getServerIp(){
$ss = exec(‘/sbin/ifconfig eth0 | sed -n \‘s/^ *.*addr:\\([0-9.]\\{7,\\}\\) .*$/\\1/p\‘‘,$arr);
$ret = $arr[0];
return $ret;
}
(2)php cgi方式下 擷取 用戶端ip和伺服器端ip
[php]
[php]
PHP擷取用戶端和伺服器IP地址的函數寫法如下:
[code=Php width=600px]/**
* 擷取用戶端IP地址
* @return string
*/
function get_client_ip() {
if(getenv(‘HTTP_CLIENT_IP‘)){
$client_ip = getenv(‘HTTP_CLIENT_IP‘);
} elseif(getenv(‘HTTP_X_FORWARDED_FOR‘)) {
$client_ip = getenv(‘HTTP_X_FORWARDED_FOR‘);
} elseif(getenv(‘REMOTE_ADDR‘)) {
$client_ip = getenv(‘REMOTE_ADDR‘);
} else {
$client_ip = $_SERVER[‘REMOTE_ADDR‘];
}
return $client_ip;
}
/**
* 擷取伺服器端IP地址
* @return string
*/
function get_server_ip() {
if (isset($_SERVER)) {
if($_SERVER[‘SERVER_ADDR‘]) {
$server_ip = $_SERVER[‘SERVER_ADDR‘];
} else {
$server_ip = $_SERVER[‘LOCAL_ADDR‘];
}
} else {
$server_ip = getenv(‘SERVER_ADDR‘);
}
return $server_ip;
}
[/code]
用戶端IP相關的變數
1. $_SERVER[‘REMOTE_ADDR‘]; 用戶端IP,有可能是使用者的IP,也有可能是代理的IP。
2. $_SERVER[‘HTTP_CLIENT_IP‘]; 代理端的IP,可能存在,可偽造。
3. $_SERVER[‘HTTP_X_FORWARDED_FOR‘]; 使用者是在哪個IP使用的代理,可能存在,可以偽造。
伺服器端IP相關的變數
1. $SERVER_NAME,需要使用函數gethostbyname()獲得。這個變數無論在伺服器端還是用戶端均能正確顯示。
2. $HTTP_SERVER_VARS["SERVER_ADDR"],在伺服器端測試:127.0.0.1(這個與httpd.conf中BindAddress的設定值相關)。在用戶端測試結果正確。
3. $_SERVER[‘LOCAL_ADDR‘] 、$HTTP_SERVER_VARS[‘LOCAL_ADDR‘],測試中,未獲得任何結果(測試環境PHP5)。
完整的獲得IP類
[code=Php width=600px]01./**
02. * Get Client/Server IP
03. *
04. * @author Yaron (http://yaron.org.cn)
05. * @version 0.1
06. * @package
07. */
08.
09.class getIP{
10. function clientIP(){
11. $cIP = getenv ( ‘REMOTE_ADDR‘ );
12. $cIP1 = getenv ( ‘HTTP_X_FORWARDED_FOR‘ );
13. $cIP2 = getenv ( ‘HTTP_CLIENT_IP‘ );
14. $cIP1 ? $cIP = $cIP1 : null;
15. $cIP2 ? $cIP = $cIP2 : null;
16. return $cIP ;
17. }
18. function serverIP(){
19. return gethostbyname ( $_SERVER_NAME );
20. }
21.}
22.
23.$getIP = new getIP();
24.$clientIp = getIP::clientIP();
25.$serverIp = getIP::serverIP();
26.
27.echo ‘Client IP is ‘ , $clientIp , ‘<br />‘ ;
28.echo ‘Server IP is ‘ , $serverIp , ‘<br />‘ ;
PHP擷取用戶端和伺服器IP地址的函數寫法如下:
[code=Php width=600px]/**
* 擷取用戶端IP地址
* @return string
*/
function get_client_ip() {
if(getenv(‘HTTP_CLIENT_IP‘)){
$client_ip = getenv(‘HTTP_CLIENT_IP‘);
} elseif(getenv(‘HTTP_X_FORWARDED_FOR‘)) {
$client_ip = getenv(‘HTTP_X_FORWARDED_FOR‘);
} elseif(getenv(‘REMOTE_ADDR‘)) {
$client_ip = getenv(‘REMOTE_ADDR‘);
} else {
$client_ip = $_SERVER[‘REMOTE_ADDR‘];
}
return $client_ip;
}
/**
* 擷取伺服器端IP地址
* @return string
*/
function get_server_ip() {
if (isset($_SERVER)) {
if($_SERVER[‘SERVER_ADDR‘]) {
$server_ip = $_SERVER[‘SERVER_ADDR‘];
} else {
$server_ip = $_SERVER[‘LOCAL_ADDR‘];
}
} else {
$server_ip = getenv(‘SERVER_ADDR‘);
}
return $server_ip;
}
[/code]
用戶端IP相關的變數
1. $_SERVER[‘REMOTE_ADDR‘]; 用戶端IP,有可能是使用者的IP,也有可能是代理的IP。
2. $_SERVER[‘HTTP_CLIENT_IP‘]; 代理端的IP,可能存在,可偽造。
3. $_SERVER[‘HTTP_X_FORWARDED_FOR‘]; 使用者是在哪個IP使用的代理,可能存在,可以偽造。
伺服器端IP相關的變數
1. $SERVER_NAME,需要使用函數gethostbyname()獲得。這個變數無論在伺服器端還是用戶端均能正確顯示。
2. $HTTP_SERVER_VARS["SERVER_ADDR"],在伺服器端測試:127.0.0.1(這個與httpd.conf中BindAddress的設定值相關)。在用戶端測試結果正確。
3. $_SERVER[‘LOCAL_ADDR‘] 、$HTTP_SERVER_VARS[‘LOCAL_ADDR‘],測試中,未獲得任何結果(測試環境PHP5)。
完整的獲得IP類
[code=Php width=600px]01./**
02. * Get Client/Server IP
03. *
04. * @author Yaron (http://yaron.org.cn)
05. * @version 0.1
06. * @package
07. */
08.
09.class getIP{
10. function clientIP(){
11. $cIP = getenv ( ‘REMOTE_ADDR‘ );
12. $cIP1 = getenv ( ‘HTTP_X_FORWARDED_FOR‘ );
13. $cIP2 = getenv ( ‘HTTP_CLIENT_IP‘ );
14. $cIP1 ? $cIP = $cIP1 : null;
15. $cIP2 ? $cIP = $cIP2 : null;
16. return $cIP ;
17. }
18. function serverIP(){
19. return gethostbyname ( $_SERVER_NAME );
20. }
21.}
22.
23.$getIP = new getIP();
24.$clientIp = getIP::clientIP();
25.$serverIp = getIP::serverIP();
26.
27.echo ‘Client IP is ‘ , $clientIp , ‘<br />‘ ;
28.echo ‘Server IP is ‘ , $serverIp , ‘<br />‘ ;