2013-11-01 3 views
0

도달 할 수없는 if-and-else 문에서 헤더 함수를 실행할 수있는 이상한 문제가 있습니다. 예를 들어if-else-else 조건이 충족되지 않았지만 헤더가 여전히 실행 됨

//www.example.com/search/title/harry+potter 


$path = explode("/", trim(trim($_SERVER['REQUEST_URI']),"/")); 

if(!$path){ 
    //if array is empty go back to index 
    header("Location: /"); 
} 

else if(!$path[1] || !$path[2]){ 
    //if neither index 1 or 2 are set go back to index 
    header("Location: /"); 
} 

이 코드는 if-else 문이 모두 충족되지 않았기 때문에 사용자를 리디렉션하지 않아야하지만 어떤 이유로 인해 두 번째 else-if 문에서 사용자를 리디렉션하는 것처럼 보입니다.

header() 함수를 echo "test"으로 바꾸면 아무 일도 일어나지 않습니다.

나는 당황 스럽다. 무엇이 문제인가?

+0

당신이 무엇을 볼 않는'header'가'위해서 var_dump ($ 경로)'으로 호출? – Barmar

+0

@Barmar nothing happens –

+1

아무 것도 보이지 않으면 'else if'에 들어 가지 않습니다. 리디렉션이 다른 곳에서 일어나고 있습니다. – Barmar

답변

0

가정을 확인하는 것이 좋습니다. 예를 들어, $_SERVER['REQUEST_URI']이 문자열 /을 반환하면 explode 함수는 빈 문자열을 포함하는 두 요소가있는 배열을 반환합니다.

URI의 처음에 // 문자열이있는 경우 $path[0]$path[1]은 모두 빈 문자열입니다.

0

문제는 if 조건을 설정하는 방법과 관련이 있다고 생각합니다. 이런 식으로 뭔가를 시도 : 당신이 대체 할 경우

<?php 
//www.example.com/search/title/harry+potter 

$URI = "/search/title/harry+potter"; 

// Placeholder for $_SERVER['REQUEST_URI'] 
    $path = explode("/", trim(trim($URI), "/")); 
// Test $path as empty array 
    //$path = array(); 
// Test $path as empty string 
    //$path = ""; 

var_dump($path); 

if(!isset($path) || empty($path)){ 
    //if array is empty go back to index 
    echo "Is empty $ path";  
    // header("Location: /"); 

} else if (strlen($path[1]) < 1 && strlen($path[2]) < 1) { 
    //if neither index 1 or 2 are set go back to index 
    echo "$ path[1] and $ path[2] are both empty";  
    // header("Location: /"); 

} else { 
    echo "$ path is an array with value in position 1 and/or 2"; 
} 

http://codepad.org/fST5A20o

관련 문제