PHP를 닫거나 닫지 않으려면


14

PHP 파일을 닫지 않는 것이 좋습니다 (특히 PHP 7의 경우). ?>

내 WP PHP 파일 중 많은 부분이 다음과 같이 끝납니다.

<?php get_sidebar(); ?>
<?php get_footer(); ?>

닫는 태그를 제거하고 이와 같은 것을 가져야합니까?

<?php get_sidebar(); ?>
<?php get_footer(); 

내 파일의 끝에?


2
Laravel과 같은 많은 프레임 워크에서 관찰 한 것처럼 닫히지 않은 PHP 태그 뒤에 아무것도 없으면 완전히 괜찮습니다. 파일 끝에서 PHP 태그를 닫지 않으며 WordPress 핵심 파일도 동일하게 수행되었습니다. 패턴을 끝내고 PHP 태그를 닫지 않았으므로 WordPress 코딩 스타일을 따르고 닫지 않아야한다고 생각합니다.
Amirmasoud

1
trac에 관련된 티켓 : # 10633
Sven

답변:


19

그렇습니다. 파일 끝에 PHP 7뿐만 아니라 PHP 5에서도 PHP 태그를 닫지 마십시오.

그 이유는 태그를 닫으면 태그 뒤에 오는 모든 것, 심지어 빈 줄조차 출력으로 보내지고 PHP가 헤더를 보내도록 쿠키를 설정하고 쿠키가 설정되지 않도록하고 작업으로 리디렉션하고 피드가 유효하도록합니다. 등등.

나는 당신이 같은 메시지를 만난 것 같아

헤더 정보-라인의 ...에서 이미 보낸 (출력 시작 ...) 헤더를 수정할 수 없습니다 ...

?>파일 끝에서 닫힘 이 원인 일 수 있습니다.


1
나는 이것이 정답이라고 믿는다. 원래 템플릿을 가져온 Underscores 도 최신 업데이트에서 닫는 태그를 제거했습니다.
IXN

@IXN 전체 파일이 PHP이므로 단일 PHP 코드 블록 (PHP 코드 블록이 파일의 끝에서 암시 적으로 닫힙니다)으로 구성되어 있으면 이것이 정확합니다. 그러나 여러 PHP 코드 블록이 있고 HTML과 PHP를 혼합하는 경우 질문의 예에서 알 수 있듯이 TheDeadMedic가 답변에 명시한 것처럼 PHP 코드 블록을 명시 적으로 닫아야합니다.
MrWhite

마지막 PHP 코드 블록 뒤에 html이있는 경우 유일한 예외라고 생각합니다. 그러나 파일의 마지막 기호가?> 인 경우 생략 할 수 있습니다. 또는 이해합니다.
IXN

닫는 PHP 태그를 생략 (또는 포함)하는 주된 이유는 개발 중에 바보 같은 버그가 발생하지 않도록하기위한 것입니다. 위에서 언급 한 것처럼 전체 PHP 파일의 경우 실수로 출력되는 오류를 피할 수 있습니다. HTML 출력과 PHP가 이미 혼합 된 파일의 경우 오류가 발생할 수 없습니다. 그러나이 두 번째 사례에서 닫는 PHP 태그를 생략하면 버그가 발생할 가능성이 있습니다. 이제 후행 HTML 컨텐츠를 추가하기 전에 PHP 태그를 명시 적으로 닫아야한다는 것을 기억해야합니다. 이는 전적으로 PHP 코드 파일에서하는 것이 아닙니다.
MrWhite

WP 소스를 살펴보면 대부분의 PHP에 후행 PHP 태그가 생략 된 것을 볼 수 있습니다. 그러나 HTML과 PHP 코드 블록을 혼합 한 템플릿 파일 에는 항상 닫는 PHP 태그가 포함됩니다.
MrWhite

11

구체적인 예를 들어, 닫는 태그, 즉 템플릿 내에서 한 줄 함수 호출을 유지합니다. 일관성이 있고 명확성을 도와줍니다 (WordPress 가 배열에 쉼표를 권장하는 것과 같은 방식으로 ). 그렇지 않으면 개발자가 아닌 사람이 파일을 선택하여 파일에 추가하기 시작했다고 상상해보십시오.

<?php get_footer();

<div>What the hell am I doing wrong?</div>

그러나 다른 모든 파일 (함수, 포함 등)의 경우 조언이 가장 좋습니다.

<?php // Start of file

class MY_Class {
    function just_do_it() {
    }
}

// Bye bye closing tag

나는 그것이 더 깨끗하고 다른 사람들이 언급했듯이 무서운 "헤더가 이미 전송되었습니다"의 위험이 없습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.