ホームページ >バックエンド開発 >PHPチュートリアル >php cli モードでサーバー IP を取得する_PHP チュートリアル
(1) php cliメソッドを使用してサーバーIPを取得します
[php]
関数 getServerIp(){
$ss = exec('/sbin/ifconfig eth0 | sed -n 's/^ *.*addr:\([0-9.]\{7,\}\) .*$/\1/p'' 、$arr);
$ret = $arr[0];
戻り $ret
}
$ss = exec('/sbin/ifconfig eth0 | sed -n 's/^ *.*addr:\([0-9.]\{7,\}\) .*$/\1/p'' 、$arr);
$ret = $arr[0];
$ret を返します;
}
[php]
[php]
PHP 取得ゲスト端末とサーバーの IP アドレスの関数数写法は次のとおりです:
[code=Php width=600px]/**
* クライアント IP アドレスを取得します
* @戻り文字列
*/
関数 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');
} その他 {
$client_ip = $_SERVER['REMOTE_ADDR'];
}
$client_ip を返します。
}
/**
* サーバーのIPアドレスを取得します
* @戻り文字列
*/
関数 get_server_ip() {
if (isset($_SERVER)) {
if($_SERVER['SERVER_ADDR']) {
$server_ip = $_SERVER['SERVER_ADDR'];
} その他 {
$server_ip = $_SERVER['LOCAL_ADDR'];
}
} その他 {
$server_ip = getenv('SERVER_ADDR');
}
$server_ip を返します。
}
[/コード]
ゲスト端末 IP 関連の变量
1. $_SERVER['REMOTE_ADDR']; ゲスト端末 IP は、ユーザーの IP である可能性もあれば、プロキシの IP である可能性もあります。
2. $_SERVER['HTTP_CLIENT_IP']; 端末の IP は存在する可能性があり、プロキシが作成できます。
3. $_SERVER['HTTP_X_FORWARDED_FOR']; ユーザは、1 つの 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. * クライアント/サーバー IP を取得する
03. *
04. * @author Yaron (http://yaron.org.cn)
05. * @バージョン 0.1
06. * @package
07.*/
08.
09.class getIP{
10. 関数 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. $cIP を返します。
17. }
18. 関数 serverIP(){
19. return gethostbyname ( $_SERVER_NAME );
20. }
21.}
22.
23.$getIP = new getIP();
24.$clientIp = getIP::clientIP();
25.$serverIp = getIP::serverIP();
26.
27.echo 'クライアント IP は ' 、 $clientIp 、 '
' ;
28.echo 'サーバー IP は ' 、 $serverIp 、 '
' ;
PHP 取得ゲスト端末とサーバーの IP アドレスの関数写法は次のとおりです:
[code=Php width=600px]/**
* クライアント IP アドレスを取得します
* @戻り文字列
*/
関数 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');
} その他 {
$client_ip = $_SERVER['REMOTE_ADDR'];
}
$client_ip を返します;
}
/**
* サーバーのIPアドレスを取得します
* @戻り文字列
*/
関数 get_server_ip() {
if (isset($_SERVER)) {
if($_SERVER['SERVER_ADDR']) {
$server_ip = $_SERVER['SERVER_ADDR'];
} その他 {
$server_ip = $_SERVER['LOCAL_ADDR'];
}
} その他 {
$server_ip = getenv('SERVER_ADDR');
}
$server_ip を返します;
}
[/コード]
ゲスト端末IP関連の量
1. $_SERVER['REMOTE_ADDR']; ゲスト端末 IP は、ユーザーの IP である可能性もあれば、プロキシの IP である可能性もあります。
3. $_SERVER['HTTP_X_FORWARDED_FOR']; ユーザは、1 つの 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./**
03. *
04. * @author Yaron (http://yaron.org.cn)
05. * @version 0.1
06. * @package
07.*/
08.
09.class getIP{
10. 関数 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. $cIP を返します。
17. }
18. 関数 serverIP(){
19. return gethostbyname ( $_SERVER_NAME );
20. }
21.}
22.
23.$getIP = new getIP();
24.$clientIp = getIP::clientIP();
25.$serverIp = getIP::serverIP();
26.
27.echo 'クライアント IP は ' 、 $clientIp 、 '
' ;
28.echo 'サーバー IP は ' 、 $serverIp 、 '
' ;