답변:
서버 IP의 경우 다음과 같습니다.
$_SERVER['SERVER_ADDR'];
그리고 이것은 항구를 위해
$_SERVER['SERVER_PORT'];
John K
대신 답을 사용하세요
PHP 버전 5.3 이상을 사용하는 경우 다음을 수행 할 수 있습니다.
$host= gethostname();
$ip = gethostbyname($host);
이것은 웹 서버를 통해 실행되지 않고 독립 실행 형 스크립트를 실행할 때 잘 작동합니다.
/etc/hosts
파일에 있어야하며 빠를 것 127.0.0.1
입니다. DNS를 호출해야한다면 말한 것처럼 느려질 것입니다.
예를 들면 :
$_SERVER['SERVER_ADDR']
IIS에서 다음을 시도하십시오.
$_SERVER['LOCAL_ADDR']
$_SERVER['LOCAL_ADDR']
PHP가 CGI 모듈로 실행되는 경우 IIS에서만 사용할 수 있습니다.
나에게 연결하는 원격 컴퓨터 중 하나가 아닌 내 IP 주소를 얻는 방법을 찾기 위해이 페이지에 왔습니다.
이것은 Windows 시스템에서는 작동하지 않습니다.
그러나 누군가 내가 찾고 있던 것을 검색하는 경우 :
#! /usr/bin/php
<?php
$my_current_ip=exec("ifconfig | grep -Eo 'inet (addr:)?([0-9]*\.){3}[0-9]*' | grep -Eo '([0-9]*\.){3}[0-9]*' | grep -v '127.0.0.1'");
echo $my_current_ip;
( Linux 및 OS X에서 로컬 컴퓨터의 기본 IP 주소를 얻는 방법 에서 뻔뻔스럽게 조정 된 것은? )
ifconfig | grep -Eo 'inet (addr:)?([0-9]*\.){3}[0-9]*' | grep -Eo '([0-9]*\.){3}[0-9]*' | grep -v '127.0.0.1' | grep -e '192\.168\.1\.'
가장 많이 찬성 된 답변 중 어느 것도 서버의 공개 주소를 안정적으로 반환하지 않습니다. 일반적으로 $_SERVER['SERVER_ADDR']
정확하지만 VPN을 통해 서버에 액세스하는 경우 공용 주소가 아닌 내부 네트워크 주소를 반환 할 가능성이 높으며 동일한 네트워크에 있지 않더라도 일부 구성은 단순히 비어 있거나 다른 일부가 지정됩니다. 값.
마찬가지로 $host= gethostname(); $ip = gethostbyname($host);
DNS (내부 구성 또는 외부 레코드)와 서버의 호스트 이름 설정을 모두 사용하여 서버의 IP 주소를 추정하기 때문에 올바른 값을 반환하지 않는 시나리오가 있습니다 . 이 두 단계 모두 잠재적으로 결함이 있습니다. 예를 들어 서버의 호스트 이름이 도메인 이름 (예 HOSTNAME=yahoo.com
:) 과 같은 형식 이면 (적어도 내 php5.4 / Centos6 설정에서) gethostbyname
로컬 서버가 아닌 Yahoo.com의 주소를 찾는 것으로 바로 건너 뜁니다.
또한 gethostbyname
퍼블릭 DNS 레코드에 폴백 되기 때문에 게시되지 않았거나 잘못된 퍼블릭 DNS 레코드가있는 테스트 서버 (예 : localhost
또는 IP 주소로 서버에 액세스 하거나 로컬 hosts
파일을 사용하여 퍼블릭 DNS를 재정의하는 경우 ) IP 주소가 반환되지 않거나 (단지 호스트 이름 만 반환 됨) 더 나쁜 경우 공용 DNS 레코드가 있거나 도메인에 대한 와일드 카드가있는 경우 잘못된 주소를 반환합니다.
상황에 따라 다음과 같이 세 번째 접근 방식을 시도 할 수도 있습니다.
$external_ip = exec('curl http://ipecho.net/plain; echo');
여기에는 자체 결함이 있으며 (특정 타사 사이트에 의존하며, 다른 호스트 또는 프록시를 통해 아웃 바운드 연결을 라우팅하는 네트워크 설정이 gethostbyname
있을 수 있음) 속도가 느릴 수 있습니다. 솔직히 어떤 접근 방식이 가장 자주 옳은지는 모르겠지만, 명심해야 할 교훈은 특정 시나리오 / 구성으로 인해 이러한 모든 접근 방식에 대해 잘못된 출력이 발생한다는 것입니다. 가능하면 접근 방식을 확인하십시오. 사용하면 예상 한 값이 반환됩니다.
이것은 서버에 설치된 컬에 대해 걱정하지 않고 위의 예를 적용하여 사용할 수있는 것입니다.
<?php
// create a new cURL resource
$ch = curl_init ();
// set URL and other appropriate options
curl_setopt ($ch, CURLOPT_URL, "http://ipecho.net/plain");
curl_setopt ($ch, CURLOPT_HEADER, 0);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);
// grab URL and pass it to the browser
$ip = curl_exec ($ch);
echo "The public ip for this server is: $ip";
// close cURL resource, and free up system resources
curl_close ($ch);
?>
IIS에서 $ _SERVER [ 'REMOTE_ADDR'] 및 $ _SERVER [ 'SERVER_ADDR']을 다시 가져 오는 간단한 스크립트를 만들었으므로 모든 변수를 변경할 필요가 없습니다. 모든 페이지에 포함 된 PHP 파일에이 텍스트를 붙여 넣으십시오.
/** IIS IP Check **/
if(!$_SERVER['SERVER_ADDR']){ $_SERVER['SERVER_ADDR'] = $_SERVER['LOCAL_ADDR']; }
if(!$_SERVER['REMOTE_ADDR']){ $_SERVER['REMOTE_ADDR'] = $_SERVER['LOCAL_ADDR']; }
$ _SERVER 어레이 확인
echo $_SERVER['SERVER_ADDR'];
$_SERVER["SERVER_ADDR"]
는 HTTP 헤더와 관련 이 없습니다. 이것은 서버 소프트웨어로 채워지며 $ _SERVER의 모든 HTTP 관련 항목에는 HTTP_ 접두사가 붙습니다. php.net/manual/en/reserved.variables.server.php
이렇게 :
$_SERVER['SERVER_ADDR'];