PHP 파일에서 닫는 태그 (?>)?


17

어떤 사람들은로 PHP 파일을 닫아서 맹세하고 어떤 사람들 ?>은 그것을 차단하는 것이 더 최적화되어 있다고 말합니다.

나는 그것이 거기에 있어야 할 필요는 없다는 것을 알고 있습니다. 나는 단지 장단점이 무엇인지, 그리고 모범 사례가 무엇인지 궁금합니다.



어떤 사람들은 "더 최적화 된"이라는 문구가 "더 빨리 달릴 것"을 의미한다고 가정합니다. 화자 (모국어가 영어가 아닐 수도 있음)는 "보다 최적"또는 "더 나은 연습"과 같은 것을 의도했을 수 있습니다.
Scott C Wilson

답변:


27

성능의 문제 ?>는 아닙니다 . 후행을 파싱하는 것은 사소한 것이며 초당 백만 개의 파일을 포함하지 않는 한 눈에 띄는 차이가 없습니다.

IIRC, php.net은을 추가하지 말 것을 권장 ?>하며 그 이유는 다음과 같습니다.

  • 불필요
  • 실수로 큰 공백을 추가 ?>하면 클라이언트에 출력되어 '헤더가 이미 전송되었습니다'오류가 발생할 수 있습니다 (포함 된 파일에 공백이 포함되어 있으면 헤더를 설정하려고합니다) 해당 파일 포함)

여기에있는 답변 (특히 "이미 송신 된 헤더"오류를 일으키는 빈 공백에 관한)에 기초하여, PHP 파일의 끝에?>를 포함하여 종교적으로 습관을 바 꾸었습니다. PHPStorm을 사용하여 새 파일을 만들 때 템플릿에 <? php 닫는 태그없이 <? php를 삽입 한 것만으로도 딱딱한 코딩이라고 생각했습니다. 이제는 더 잘 알고 있습니다.
tcrosley

"이미 헤더를 보냈 음"이라는이 정확한 이유는 이것이 나의 고용주 (큰 웹 포털)에 의해 엄격히 금지 된 이유였습니다. 방금 작성한 파일의 끝에서 잊어 버렸을 때 한 가지입니다. 깊이가 3 인 라이브러리 항목을 편집하면 텍스트 편집기가 공백없이 공백을 삽입하고 갑자기 건물 2 개가 운영 한 포털이 작동을 멈 춥니 다. 포함 트리는 종종 100 개 이상의 파일로, 버그가 인내심을 나타내는 것으로 밝혀졌습니다. 버그가 발견되어 다시 추적되면 몇 주 후 "고마움"방문을 기대하십시오.
SF.

1
닫는 태그 다음에 공백을 보내는 PHP는 잘못된 언어 결정의 또 다른 예입니다.
user949300

12

아니, 그들은 틀렸다.

?>파일의 끝에 PHP에서 옵션입니다. 그리고 당신은 이것에 대한 좋은 이유를 찾을 수 있습니다. 가장 중요한 것은 파일 끝에 빈 공간이 있어도 헤더를 보낼 수 없다는 것입니다. 어느 파일에서나 찾을 수 있기 때문에 발견하기 어려운 버그입니다.

일반적인 방법은 PHP와 HTML이 혼합 된 경우 닫는 태그를 넣고 순수한 PHP 파일에는 넣지 않는 것입니다. ZEND 프레임 워크 와 다른 많은 것의 코딩 표준 이기도 합니다.

최적화는 코드가 더 빨리 실행됨을 의미합니다. 이것은 그들이 틀렸다는 것을 쉽게 증명할 수 있습니다. 코드를 프로파일 링하고 그들이 당신에게 헛소리를 말하고 있음을 알아냅니다.


4

추가 줄 바꿈 문자가 실수로 전송되지 않도록 초보자가 추가하지 않는 것이 좋습니다. 당신이 언급 한 것처럼 그것을 가질 필요는 없기 때문에, 일반적인 추론은 실수를 피하기 위해 더 잘 남겨 두는 것입니다.

관련된 "최적화"는 없다고 생각합니다.

내가 여기 당신을 가리킬 것이다 : /programming/4410704/php-closing-tag 여기 : /programming/3219383/why-do-some-scripts-omit-the -닫기 -php-tag


1
초보자이든
아니든

@Mchl 나는 떠나는 이유가 아주 사소한 것이며 결국에는 프로그래머의 선호에 달려 있고 실제로는 OCD 문제가 아니라고 지적합니다.
Kenneth

1
?>순수한 PHP가 들어있는 파일에서 볼 때마다 울었습니다 .
Caffeinated Aviator

@ 케네스 : 그들이 사소한 경우-나는 그들을 볼 수 없습니다. OCD 부분은 농담이었습니다.
Mchl
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.