좋아요

좋아요

내 스튜디오의 누군가가 몇 년 전에 웹페이지를 디자인했는데 이제 클라이언트가 서버를 변경하기로 결정했습니다(그는 Gen2 SMP, 64비트, PHP 버전 5.3.8, 표준 MYSQL 버전 5를 실행하는 Linux Apache 서버로 이동했습니다). 갑자기 이상한 일이 일어나기 시작했습니다.

로그인이 필요한 링크를 클릭하면 해당 페이지는 header()PHP의 기능을 사용하여 로그인 페이지로 리디렉션됩니다. 흥미롭게도 페이지에는 다음이 표시됩니다.

좋아요

서버에 내부 오류 또는 구성 오류가 발생하여 요청을 완료할 수 없습니다. 서버 관리자에게 연락하여 [주소 없음] 오류가 발생한 시간과 오류를 발생시켰을 수 있는 모든 작업을 알려주십시오. 이 오류에 대한 자세한 내용은 서버 오류 로그에서 확인할 수 있습니다. HTTP/1.1 200 OK 날짜: 2012년 10월 15일 월요일 17:27:32 GMT 서버: Apache/2.2.22 (Unix) FrontPage/5.0.2.2635 X-Powered-By: PHP/5.3.8 만료: 11월 19일 목요일 1981 08:52:00 GMT 캐시 제어: 저장 없음, 캐시 없음, 재검증 필수, 사후 확인=0, 사전 확인=0 Pragma: 캐시 없음 연결 유지: 시간 초과=5, 최대=399 연결: 연결 유지 전송-인코딩: 청크 콘텐츠 유형: text/html 232c

그런 다음 페이지 자체, 그리고 다른 헤더:

0 1f4

좋아요

서버에 내부 오류 또는 구성 오류가 발생하여 요청을 완료할 수 없습니다. 서버 관리자에게 연락하여 [주소 없음] 오류가 발생한 시간과 오류를 발생시켰을 수 있는 모든 작업을 알려주십시오. 이 오류에 대한 자세한 내용은 서버 오류 로그에서 확인할 수 있습니다. 0

가장 흥미로운 점은 페이지를 새로 고치거나 URL에서 Enter 키를 누르면 올바르게 로드된다는 것입니다. 로그를 확인해 봤는데, 존재하지 않는 파비콘 때문이라고만 떠요. 또한 .htaccess를 확인했는데 모든 것이 정확했습니다(RewriteBase는 / 의도한 대로였으며 유일한 것은 ^en/ 요청을 request?lang=en으로 이동하는 또 다른 규칙입니다. 누구든지 이런 문제에 직면했습니까?

편집하다: IE는 이 두 헤더를 트리거하지 않습니다. 점점 더 이상해지고 있어요.

해결책!: @adaptr이 지적했듯이 이는 서버 관련 문제가 아니라 PHP 문제였습니다. 마지막 코더(전임자를 비난하는 것이 예의가 아니라는 것을 알고 있지만 이 상황에서는 시간이 너무 많이 걸렸습니다)는 다음과 같이 했습니다.

/* config.php -> included everywhere as a bootstrap*/
// ... constant/mysql setup

if($notLogged)
{
    $forward = ...;//previous url
    header("Location: ".WWW.LANG."/customer-area/login/index.php?forward=".$forward);
    exit;
}

더 자세히 살펴본 후 뭔가 뒤틀렸습니다. exit;헤더를 올바르게 보낼 것인가, 아니면 보내지 않을 것인가? 물론, 이를 제거하면 exit;페이지가 계속 실행됩니다(전혀 올바르지 않다는 것을 알고 있기 때문에 이전에는 시도하지 않았습니다). 그러나 헤더가 완전히 전송되지 않으면 어떤 종류의 문제가 발생할 수 있습니다. (저는 서버 전문가가 아니기 때문에 잘 모르겠습니다. 죄송합니다.) 해당 exit;호출을 제거한 후 페이지가 올바르게 형성되고 헤더가 "닫히고"(출력 시작으로 인해) 모든 기어가 다시 움직이기 시작했습니다. 모두 감사합니다 여러분, 최고 100점을 받았습니다 =)

답변1

Apache 로그에 오류가 표시되지 않으면 PHP가 이 모든 것을 처리했으며 클라이언트에 이상한 응답도 반환했음을 의미합니다.

적절한 PHP 로깅을 활성화하고 그것이 수행하는 작업을 조사하십시오.

응답의 이 비트는 다음을 나타냅니다.

전송 인코딩: 청크

이는 PHP가 응답을 (text/html) 스트림으로 보내는 것을 의미합니다.Content-Size가 정의되지 않았습니다.헤더에.

이로 인해 클라이언트가 새 페이지가 전송되고 있다고 생각하게 만드는 헤더 출력(PHP가 자주 캐시하는 것, 즉 순서가 잘못되어 생성되는 것)이 발생할 수 있습니다.

그것은 단지 하나의 가능한 이유일 뿐입니다. 적절한 PHP 로깅을 통해 자세한 내용을 알 수 있습니다.

답변2

이유를 찾기 위해 서버를 살펴보는 대신 페이지 코드를 디버깅해야 합니다. 귀하가 게시한 내용을 보면 FrontPage를 사용하여 작성된 것이므로(실제로 전문가가 사용했습니까?) Microsoft가 아닌 플랫폼에서는 제대로 작동하지 않는 코드가 필연적으로 포함되어 있습니다. 모든 Microsoft 특정 코드를 제거하여 코드를 수정하면 올바르게 실행될 수 있습니다.

관련 정보