include, require, include_once, require_once 를 어떤 때 써야하나?

1 minute read

include, require, include_once, require_once 가 기본적으로 다른 php파일을 가져와서 소스에 포함시키는 방법이죠.

  • include, require 의 차이
  • include : 해당 파일이 없어도 php 처리 진행이 멈추지 않고 계속 진행합니다. (Warning 에러가 발생됨)
  • require : 해당 파일이 없으면 php 처리 진행이 멈춥니다.(Fatal Error 에러가 발생됨)
  • 즉, 파일이 없을 경우 계속 진행하나? 멈추나?의 차이

  • _once 가 붙는 것 대한 차이
  • _once가 없을 경우 : 계속 include나 require로 파일 소스에 포함 시킵니다.
  • _once가 있을 경우 : 최초 한번만 파일을 소스에 포함 시킵니다.(중복 불가)
  • 즉, 파일을 한번만 불려와야 할 경우 사용(경로 기준)
  • 보통 함수 라이브러리 파일이나 클래스 파일에 사용.

  • 사용처로 분류
  • include : 복수로 불러도 문제가 없는 스킨 파일, 설정 파일
  • 없어도 문제 없는 파일
  • 디자인 파일, 스킨 파일
  • 변수로만 구성된 파일
  • 여러번 불려도 문제 없는 파일
  • ex> 
  • 부가적인 스킨 파일(없어도 에러나거나 에러를 숨겨서 서비스 가능)

  • require : 복수로 불러도 문제가 없는 스킨 파일, 설정 파일
  • 필수 파일(없을 경우 서비스가 되면 안되는 파일)
  • 디자인 파일, 스킨 파일
  • 변수로만 구성된 파일
  • 여러번 불려도 문제 없는 파일
  • ex>
  • header, contents , 내용의 row 부분 등 서비스 중요 스킨 부분

  • include_once : 차라리 require_once 를 써라.
  • 없어도 문제 없는 파일
  • 함수 라이브러리, 클래스 파일
  • 최초 한번만 실행하는 비지니스 플로우
  • ex>
  • 해당 페이지에서 사용자 권한 체크하는 비지니스 플로우 파일(최초 한번만 체크하만 되므로)
  • 물론 이렇게 만드는건 별로 좋은 방법이 아닌 것 같지만…

  • require_once : 함수, 클래스 파일
  • 필수 파일(없을 경우 서비스가 되면 안되는 파일)
  • 함수 라이브러리, 클래스 파일
  • ex>
  • DB 제어 클래스, 어쨌든 클래스 파일. 함수 라이브러리 파일
  • 서비스에 꼭 필요하며, 두번 읽어버리면 declare 에서가 발생됨.

  • 요약
  • 기본적으로 require와 include는 별 차이가 없음, 보통 만들 때 Warring의 에러를 체크하므로 차이가….없어 보임
    하지만 개발과 운영의 서버가 따로 있고 에러 리포팅 설정이 다를 경우 차이가 발생됨.(운영에서는 Warring을 꺼버리는 경우가 있음. 사용자에서 에러 안보여줄려고. 그러면 개발자도 모름.(내부 에러 핸들링을 하면 되겠지만…))
  • 중요 파일은 require를 쓰는게 맞음.
  • class 파일도 소스상에서 한번만 부르도록 만들는게 맞지만, php특성상 너무 널널해서 장담하기 힘드므로 require_once를 쓰는게 좋음.
  • 즉, 기본적으로 require와 require_once를 쓰면 됨.
  • 바로 에러가 발생되서 처리할 수 있도록.
  • PHP버전에 따라서 Fatal Error의 경우 에러핸들링이 안될 수 있음. 주의!
  • http://stackoverflow.com/questions/8527894/set-error-handler-doenst-work-for-fatal-error

  • 더 간단히
  • …그냥 아무렇거나 써도 에러만 잡을 수 있게 만들면 된다.

🔗original-link

Updated: