2012-11-21 3 views
2

글쎄. 나는 몇 가지 주제를 읽었지 만 매우 구체적인 답변을 찾지 못했습니다.PHP가 로컬 서버에서 실행되고 있는지 확인하십시오.

PHP 코드가 로컬 또는 원격 호스트에서 실행 중인지 PHP로 확인해야합니다. 현재 $_SERVER['SERVER_NAME']으로 확인하지만 일관성이 없습니다. 이 경우, 나열된 IP가 127.0.0.1 또는 localhost 인 PHP를 실행하면 로컬, 그렇지 않은 경우 원격으로 간주됩니다. 내 IP를 친구와 공유하면 내 코드는 여전히 로컬이지만 공유 IP가 나열되어 있지 않기 때문에 리모컨으로 간주합니다.

로컬 호스트에 대한 IP 검사가 좋은 방법이 아니라고 생각합니다 (좋은 방법을 알고있는 경우는 예외). gethostbyaddr()gethostbyname()과 같은 방법을 시도했지만 제대로 작동하지 않습니다.

내가 보여줄 수있는 PHP 코드가없는,하지만 내 코드는 기본적으로 즉 :

// true = localhost 
return $_SERVER['SERVER_NAME'] === '127.0.0.1'; 

근본적인 질문은 : 어떤 PHP 지역 실행되고 있는지 확인할 수 있습니까? PHP에 "로컬"이란 무엇입니까? 나는 그것이 문제를 해결할 수 있다고 생각한다.

Obs : PHP와 함께 CMD/Shell에 액세스 할 수 없습니다.

+1

이 질문은 의미가 없습니다. PHP의 관점에서 볼 때 항상 로컬 서버에서 실행됩니다. – NullUserException

+1

"로컬"이란 무엇입니까? – zerkms

+1

perl에서는 local.txt 파일을 로컬 컴퓨터의 파일 시스템에 추가하고 파일의 존재 여부를 확인했습니다. – user4035

답변

1

체크 $_SERVER['REMOTE_ADDR']=='127.0.0.1'. 로컬에서 실행중인 경우에만 해당됩니다. 이는 서버에 로컬이라는 것을 의미합니다. PHP 페이지를 요청하는 서버에서 실행되는 스크립트가있는 경우에도이 조건을 충족합니다.

누군가가 웹을 통해 귀하의 사이트를 방문하는 경우, 프록시 사용에 관계없이 표시되는 IP 주소는 결코 127.0.0.1 (또는 IPV6의 경우 1)이되지 않습니다. (당연히 동일한 서버에서 프록시를 실행하고 있지 않는 한)

+2

"로컬에서 실행하는 경우에만 true"--- "동일한 시스템에서 요청한 경우"라고 말하고 싶습니다. – zerkms

+0

요청은 원격이지만 PHP *는 항상 로컬에서 실행됩니다. – NullUserException

+0

가상 박스 또는 VM웨어에서 실행하는 경우, 그들은 다른 IP를 할당합니다 - 이것은 오래된 게시물이지만 여전히 인터넷 검색과 관련됩니다 - '로컬 또는 로컬 서버에서 실행중인 경우 PHP가 탐지합니다'/ –

1

내가 아는 한, 은 어떤 주소가 로컬인지 알 수 있습니다. 로컬로 보이지 않는 IP 주소로 네트워크를 설정할 수 있습니다. PHP는 내가 아는 한 멀리까지 스스로 결정할 수 없다.

if(strpos(gethostname(), '.local') !== false) { } 

기본적으로 호스트 이름이 여기에 .local을 추가 한 내 모든 워크 스테이션의 :

1

이것은 내가 그것을 내가 127.0.0.1에 대한 감지하는 것보다 더 믿을만한 발견하는 방법이다. 이 값을 워크 스테이션의 호스트 이름과 완전히 일치하도록 변경할 수 있습니다.

3

당신은 대부분의 PHP 프레임 워크가 할 일을하고 코드가 실행되는 환경 정의 앱의 부트 스트랩 단계에서 플래그를 설정할 수는 가장 간단한 형태의에서 :.

// the setting when run on a dev machine 
define('ENV', 'local'); 

그 다음은 간단한 경우가있다 :

if (ENV == 'local') 
{ 
    // do stuff 
} 
관련 문제