2013-11-26 5 views
0

URL이 내 관리 영역의 일부인지 확인하는 간단한 방법이 있습니다.URL localhost 대 온라인 구문 분석

protected function is_admin_url ($url) { 
    $parts = parse_url($url); 
    if (!empty($parts['path'])) { 
     $steps = explode('/', $parts['path']); 
     if ($steps[1] == $this->slug) // $steps[0] will always be empty 
      return true; 
    } 
    return false; 
} 

그것은 형태 http://example.com/slug/foo?bar=baz 난 데 문제는 내 로컬 컴퓨터에서 개발하는 동안 (WAMP를 사용) 것입니다 모든 URL 형태 http://localhost/example.com/slug/foo?bar=baz에에있는 URL에 대한 true를 반환해야합니다. 이것은 물론 도메인이 이제 경로의 일부이기 때문에이 메서드를 중단합니다.

하드 코딩은 배열 색인을 통해 버그를 유발합니다. 이 문제를 처리하기 위해 추가 할 수있는 조건문이 있습니까?

참고로, 이것은 WordPress 용 플러그인의 일부입니다. 사이트 URL을 알 수 없습니다.

답변

1

이 점은 $steps[1]에 있거나 로컬 환경에서 작업하는 경우 만 확인하면 당신은 확인할 수 있습니다

protected function is_admin_url ($url) { 
    $parts = parse_url($url); 
    if (!empty($parts['path'])) { 
     $steps = explode('/', $parts['path']); 
     $slug = $steps[1]; 
     if (strpos($steps[1], '.')) $slug = $steps[2]; 
     if ($slug == $this->slug) 
      return true; 
    } 
    return false; 
} 

또는

protected function is_admin_url ($url) { 
    $parts = parse_url($url); 
    if (!empty($parts['path'])) { 
     $steps = explode('/', $parts['path']); 
     $slug = $steps[1]; 
     if ($_SERVER['REMOTE_ADDR'] == '127.0.0.1') $slug = $steps[2]; 
     if ($slug == $this->slug) 
      return true; 
    } 
    return false; 
} 
+0

점 방식은 이론적으로 작동하지만 내 슬러그는 설정 가능한 매개 변수입니다. 폴더 이름에는 점이 허용되어 이러한 접근 방식에 문제가 있다고 생각합니다. 나는 REMOTE_ADDR의 가치를 믿어서는 안된다. – Twifty

+0

아무것도 반환 할 수 있기 때문에. 어때요 ":: 1"또는 서버 온라인 IP. 물론 내 컴퓨터 설정을 사용하도록 구성 할 수 있지만 다른 컴퓨터에서 코딩하면 잘못된 결과가 발생할 수 있습니다. – Twifty

+0

어쨌든 다른 것을 원하면'$ _SERVER [ 'SERVER_NAME'] === "localhost"'를 사용하여 많은 문제가 생길 것 같지 않습니다. 또한,에 대해 REMOTE_ADDR : http://stackoverflow.com/a/4773981/653378 – evuez

0

그냥 S/가장 최근의 사이 부분을 확인

protected function is_admin_url ($url) { 
    $pFile = strrpos($url, '/'); 
    $pFolder = strrpos($url, '/', $pFile-1); 
    if (($pFile === false) or ($pFolder === false)) { 
     return false; 
    } 
    $folder = substr($url, $pFolder+1, $pFile-$pFolder-1); 
    return ($folder == $this->slug); 
} 

BurninLeo는

+0

'HTTP와 같은 URL을 작동하지 않습니다 : //localhost/example.com/slug/foo/? bar = baz' 또는 여러 폴더 – Twifty

+0

작업이 적절하게 정의되지 않았다고 생각합니다. 이 메소드가 "admin URL"로 받아 들여야하는 항목은 무엇입니까? URL의 어느 곳에서나 "슬러그"가 충분합니까? 또는 가양 성을 피하기 위해 모든 가능한 관리 폴더를 확인해야합니까? – BurninLeo

+0

슬러그는 항상 첫 번째 폴더가됩니다. – Twifty

0

은 아마 당신은 $ _SERVER 경우 감지를위한 [ 'REMOTE_ADDR'] == '127.0.0.1'와 확인을 사용할 수 있습니다 개발 환경이거나 global config에 변수 $ local = true를 넣고 is_admin_url 함수를 사용하십시오.

+0

http://stackoverflow.com/questions/4262081/serverremote-addr-gives-server-ip-rather-than-visitor-ip REMOTE_ADDR을 (를) 신뢰할 수 없습니다. – Twifty