복붙노트

닫기 태그를 생략하는 이유는 무엇입니까?

PHP

닫기 태그를 생략하는 이유는 무엇입니까?

나는 파일의 끝에 PHP 닫기 태그를 사용하는 것이 좋지 않다는 것을 계속 읽고있다. 헤더 문제는 다음과 같은 맥락에서 무의미한 것으로 보인다 (그리고 이것은 지금까지 유일한 좋은 논증이다).

모든 우수 사례집과 위키는이 '규칙'으로 시작하지만 아무도 좋은 이유를 제시하지 못합니다. 끝나는 PHP 태그를 건너 뛰는 다른 좋은 이유가 있습니까?

해결법

  1. ==============================

    1.

    다른 이유를 기억할 수는 없지만 정상적인 과정보다 먼저 헤더를 보내면 결과가 훨씬 커질 수 있습니다. 아래는 그 순간 내 마음에 와서 일어난 몇 가지 예입니다.

    보너스 :이 두 캐릭터와 관련된 몇 가지 문제점 (사실 현재 하나) :

  2. ==============================

    2.

    php 닫는 태그 (?>)를 생략해야하는 이유는 프로그래머가 실수로 여분의 개행 문자를 보내지 않기 때문입니다.

    php 태그에서 불균형을 일으키고 반쯤 마음이있는 프로그래머가 여분의 공백을 추가하지 않는다는 것을 기억할 수 있기 때문에 php 닫는 태그를 떠나지 말아야하는 이유가 있습니다.

    그래서 귀하의 질문 :

    아니, PHP php 태그를 건너 뛰는 또 다른 좋은 이유는 없습니다.

    나는 닫는 태그로 귀찮게하지 않는 것에 대한 몇 가지 주장을 끝낼 것이다.

  3. ==============================

    3.

    이것은 초보자에게 코딩 스타일 권장 사항이며, 선의가 있고 설명서에 조언되어 있습니다.

    ?> 닫기 태그의 사용을 막는 것은 드문 경우를 피하기 위해 기본적인 PHP 처리 동작과 언어 의미를 설명하는 것을 지연시킵니다. 참여자의 숙련도 차이로 인해 협업 소프트웨어 개발이 여전히 실용적입니다.

    따라서 문맥에 따라 다르지만 근본적인 닫기 태그 누락에 대한 실용적인 대안이 있습니다.

    ?> 닫기 태그 수동 베이비 시팅은 그다지 현대적이지 않습니다. (sed / awk 또는 regex-oneliners 일지라도) 자동화 도구가 항상 존재합니다. 특히:

    일반적으로 써드 파티 코드를위한 PHP 태그를 unclose하거나 실제로 공백 / BOM 문제를 고치는 데 사용할 수 있습니다 :

    또한 런타임 / 구성 호환성을 위해 --long 태그 변환 등을 처리합니다.

  4. ==============================

    4.

    그것은 태그가 아닙니다 ...

    그러나 당신이 그것을 가지고 있다면, 당신은 그 후에 공백을 가질 위험이 있습니다.

    문서 상단의 포함 항목으로 사용하면 HTTP 헤더를 보내기 전에 공백 (예 : 내용)을 삽입 할 수 있습니다. 허용되지 않습니다.

  5. ==============================

    5.

    닫는 것을 허용하지 않는 것이 유용합니다.

    이 파일은 구문 오류가 아닌 PHP에 유효하며 @David Dorward는?> 뒤에 빈 줄 / 구분선 (브라우저에 헤더를 보낼 수있는 모든 항목)이 없도록 허용한다고 말했습니다.

    예를 들어,

    <?
        header("Content-type: image/png");
        $img = imagecreatetruecolor ( 10, 10);
        imagepng ( $img);
    ?>
    [space here]
    [break line here]
    

    유효하지 않습니다.

    그러나

    <?
        header("Content-type: image/png");
        $img = imagecreatetruecolor ( 10, 10 );
        imagepng ( $img );
    

    의지.

    한 번만, 당신은 게으르다 확보해야합니다.

  6. ==============================

    6.

    문서에 따르면 다음과 같은 이유 때문에 파일 끝에있는 경우 닫기 태그를 생략하는 것이 좋습니다.

    PHP Manual> 언어 버전> 기본 구문> PHP 태그

  7. ==============================

    7.

    음, 그것을 보는 두 가지 방법이 있습니다.

    첫 번째 경로를 믿는다면 모든 PHP 파일은 종결 태그를 필요로합니다. 이를 생략하면 유효하지 않은 XML 파일이 작성됩니다. 다시 말하지만, 선언을하지 않아도 어쨌든 올바른 XML 파일을 가질 수 없습니다 ... 따라서 중요한 문제는 아닙니다 ...

    두 번째 경로를 믿으면 두 가지 유형의 .php 파일을 열 수 있습니다.

    이를 바탕으로, 코드 전용 파일은 닫을 필요없이 끝날 수 있습니까?> 태그. 그러나 XML 코드 파일은 XML을 무효로 할 것이므로 닫지 않고 끝내려면 괜찮지가 않습니까?

    하지만 네가 무슨 생각하는지 알아. 여러분은 PHP 파일을 직접 렌더링하지 않으므로 올바른 XML인지 누가 신경 씁니까? 템플리트를 디자인하는 경우 중요합니다. 유효한 XML / HTML이라면 일반 브라우저는 단순히 PHP 코드를 표시하지 않습니다 (주석처럼 취급됩니다). 그래서 PHP 코드를 실행할 필요없이 템플릿을 조롱 할 수 있습니다.

    나는 이것이 중요하다는 말은 아니다. 그것은 내가보기에는 너무 자주 표현하지 못하기 때문에 그것을 공유하기에 더 좋은 곳입니다 ...

    개인적으로 라이브러리 파일의 태그는 닫지 않지만 템플릿 파일에서는 태그를 사용하지 않습니다 ... 개인적인 취향 (코딩 지침)은 어려운 것 이상의 것을 기반으로합니다.

  8. ==============================

    8.

    글쎄, 그 이유는 알지만 그걸 보여줄 수는 없어.

    출처 : http://framework.zend.com/manual/en/coding-standard.php-file-formatting.html

  9. ==============================

    9.

    이미 언급 된 모든 것 외에도, 우리가 디버깅하는 데 큰 고통을주는 또 다른 이유를 던질 것입니다.

    PHP 5.4가있는 Apache 2.4.6은 실제로 닫는 PHP 태그 뒤에 빈 공간이있을 때 우리의 생산 시스템에서 세그먼트 화 오류가 발생합니다. 나는 strace로 버그를 좁히기까지 몇 시간을 낭비했다.

    아파치가 던지는 오류는 다음과 같습니다.

    [core:notice] [pid 7842] AH00052: child pid 10218 exit signal Segmentation fault (11)
    
  10. ==============================

    10.

    나는 태그를 생략하는 것에 찬성하는 주장이 더 강해 보인다 (header () + PHP / Zend "recommendation"로 큰 두통을 피하는 데 도움이된다). 나는 이것이 지금까지 구문 일관성 측면에서 본 "가장 아름다운"솔루션이 아니라는 것을 인정하지만 더 좋을 수있는 것은 무엇입니까?

  11. ==============================

    11.

    "끝 부분의 PHP 태그를 건너 뛰는 또 다른 좋은 이유가 있습니까?"

    바이너리 출력, CSV 데이터 또는 기타 HTML이 아닌 출력을 생성 할 때 실수로 외부 여백 문자를 출력하지 않습니다.

  12. ==============================

    12.

    내 질문이이 질문의 중복으로 표시되었으므로 O.K라고 생각합니다. 왜 닫는 태그를 생략하지 않는지 게시 하시겠습니까?> 원하는 이유가있을 수 있습니다.

    유효한 XML / HTML / SGML 코드를 작성할 수 없습니다. PHP 문서는 이것을 알고 있습니다. 발췌 :

    물론 PHP 구문은 엄격한 SGML / XML / HTML이 아니며 HTML을 XHTML로 변환하여 XML을 준수 할 수있는 것처럼 SGML / XML / HTML이 아닌 문서를 만듭니다.

  13. ==============================

    13.

    질문을 올바르게 이해하면 출력 버퍼링과 이것이 닫기 / 끝 태그에 미치는 영향과 관련이 있습니다. 그 질문이 전적으로 유효한 것인지 확실하지 않습니다. 문제는 출력 버퍼가 모든 내용을 클라이언트에 보내기 전에 메모리에 저장된다는 의미는 아닙니다. 콘텐츠의 일부를 의미합니다.

    프로그래머는 의도적으로 버퍼 또는 출력 버퍼를 플러시 할 수 있으므로 PHP의 출력 버퍼 옵션이 닫는 태그가 코딩에 미치는 영향을 실제로 변경합니다. 나는 그렇지 않다고 주장 할 것이다.

    그리고 아마도 이것이 대부분의 답변이 개인적인 스타일과 구문으로 돌아간 이유입니다.

  14. ==============================

    14.

    PHP 코드의 두 가지 사용법이 있습니다 :

    경우 1. 닫는 태그는 완전히 unusefull입니다, 나는 또한 단 한 (한) PHP의 열린 태그와 NO (제로) 닫는 태그를보고 싶습니다. 이것은 코드를 깔끔하고 별도의 논리를 표현으로 만드는 좋은 방법입니다. 프리젠 테이션 케이스 (2)에서 PHP는 사실상 2 개의 개별적인 유스 케이스가 있기 때문에 혼동해서는 안되는 모든 태그 (심지어 PHP 처리 된 태그)를 닫는 것이 자연 스럽다는 것을 알았습니다 : logic / calculus 발표

  15. from https://stackoverflow.com/questions/4410704/why-would-one-omit-the-close-tag by cc-by-sa and MIT lisence