2016-12-05 5 views
0

나는 내 코드에서 버그가 있다고 생각했지만 문제를 격리함으로써 switch case 내부의 error_log()의 '이상한'동작을 발견했습니다.PHP error_log는 여전히 스위치로 작동합니다.

디버깅을 위해 error_log를 추가했지만 스위치를 돌릴 때마다 유효한 케이스 외부에서 호출이 이루어진 경우에도 error_log가 항상 트리거됩니다. 여기

날이 wierdness 알아 만들어 내 코드의 정확한 부분 :

switch($LLTP->request()){ 

    case 'json': 
    /* some code commented out for debug here */ 
    error_log('json'); 
    echo 'json'; 
    break; 

    default: 
    /* some code commented out for debug here */ 
    error_log('html'); 
    echo 'html'; 
    break; 
} 

요청 방법은 평범하고 단순하고 'json','html','ajax' 등과 같은 문자열을 반환 ..

public function request(){ 
    return $this->requests; 
    } 

그래서 스위치가 html이면 기본 설정이 적용되고 결과는 다음과 같습니다.

'html'

오류 로그 'HTML'(예상)

하지만 난 'JSON'스위치를 실행할 때, 나는 화면과의 error_log 내부의 기대 'JSON'를 얻을 수 있지만 또한 얻을 'HTML '오류 항목 (에코없이).

(예상) 'JSON'

오류 로그 'JSON'(예상)

오류 로그 'HTML, 리퍼러 : https://www.example.com/home.json'메아리 (예상치 못한)

이 정상적인 행동인가를? Fisrt 시간이 나는 그것을 발견하고 난 다른 샘플 코드로 '불확실성'을 재현하려고하면 :

$vv='json'; 
switch($vv){ 
    case 'json': 
    echo 'json'; 
    error_log('json'); 
    break; 
    default: 
    echo 'html'; 
    error_log('html'); 
    break; 
} 

내가 (오류 로그에서) 얻을

[오류] JSON (예상)

[오류] JSON, 리퍼러 :

내가 잃었어요, 무언가가 (이 로그의 두 번째 항목의 unexpeted 로) http://www.example.com/home.json 난 u는하지 않습니다 예상치 못한 결과가 예상 한 것과 다릅니다.

추신 : 페이지에 오류를 출력하지 않습니다. 로그에 오류 만 기록합니다. 이것이 그 일과 관련이 있다면 .O

+0

사람들이 투표를하는 이유를 아는 것이 좋을 것입니다. 그럴 경우 설명하십시오. –

+0

재현 할 수 없습니다. 오류 로그에서 타임 스탬프가 동일합니까? – rNix

+0

네, 때로는 1 초 간격을 제외하고는 ..이 시나리오에 평소보다 완전히 다른 행동을합니다. 나는 디버그를위한 메소드, 함수, 함수를 고립시켰다. 내가 손으로 코딩 한게 틀림 없어. 나는 다른 모든 것이 예상대로 작동하기 때문에 기절합니다. 만약 내가 심지어 내가 내 결론을 여기에서 게시 할 것을 알면 –

답변

0

오늘 나는 이것의 원인을 발견했다.

내가 테스트했을 때 브라우저에서 json 요청을 스푸핑하고있었습니다. 그러나 매번 새로 고침을 할 때마다 내 브라우저는 favicon.ico 파일에 대한 요청을 보냅니다. 이후 이미지에 대한 mod_rewrite 규칙을 추가하지 않았으므로 코드에 의해 일반 html 요청으로 처리되었으므로 스위치의 html 부분을 호출합니다.