PHP에서 "include"와 "require"의 차이점


174

그들 사이에 차이점이 있습니까? 그것들을 선호의 문제로 사용하고 있습니까? 다른 것을 사용하면 어떤 이점이 있습니까? 어느 것이 보안에 더 좋습니까?



3
항상 "필수"를 사용하십시오. "포함"은 사우나의 전기 도어만큼 편리합니다.
Marco Mariani

2
@MarcoMariani 어떻게 불편할까요? 아마 분명합니다, 나는 그것을 보지 못하고 있습니다. 아마도 증기?
Austin Burk 2016 년

간단히 말해서 실수로 'foo.php'파일이 누락 된 경우 foo.php에 있어야 할 함수가 호출 될 때가 아니라 가능한 한 빨리 알고 싶습니다. include를 require로 바꾸면 종종 버그가 드러날 수 있습니다. config.php가없고 응용 프로그램이 기본 구성으로 실행되고 있다고 가정 해 봅시다. 어느 것이 보안에 더 좋습니까? 사우나에 관해서는, 내가 안에 있고 문이 어떤 이유로 든 열리지 않을 때 나는 그것을 좋아하지 않습니다.
Marco Mariani

답변:


148

차이점 페이지require 에서 자세한 PHP 매뉴얼에 설명되어 있습니다 .

require ~와 동일하다 include실패시 제외하고는 치명적 E_COMPILE_ERROR수준의 오류 도 생성합니다 . 다시 말해, 스크립트는 스크립트를 정지시키는 반면 include E_WARNING는 스크립트를 계속할 수있게 하는 경고 ( ) 만 방출합니다 .

참조 efritz의 대답 @예를 들어 을


6
tiposaurus.co.uk/2011/04/04/… "require ()와 include ()의 주요 차이점은로드 할 수없는 파일 (예 : 파일이없는 경우)이 필요한 경우 ( 치명적인 오류가 발생하여 페이지 실행이 완전히 중단되고 더 이상 출력이 생성되지 않습니다. 반면로드 할 수없는 파일을 포함 ()하면 경고 만 발생합니다. 페이지를 계속 작성하십시오. "
stormwild

3
"사용할 대상은 상황에 따라 다릅니다. require ()는 페이지의 나머지 부분에 필수적인 파일을로드하는 데 가장 적합합니다. 예를 들어 데이터베이스 기반 웹 사이트가있는 경우 require ()를 사용하여 include ()를 사용하는 것보다 데이터베이스 로그인 및 비밀번호가 더 선호됩니다.이 상황에서 include ()를 사용한 경우 의도 한 것보다 더 많은 경고 및 오류가 생성 될 수 있습니다. "
stormwild

3
<?php if (isset($flibbertygibbet)) require 'file.php';이 답변이 완전히 잘못된 것처럼 보입니다. 그렇지 않으면 조건이 사실이 아니더라도 치명적인 오류가 발생합니다. strace을 터치하려고해도 PHP가 표시되지 않습니다 file.php.
cHao

include ()와 달리 require ()는 대상 행에서 행이 실행되지 않더라도 항상 대상 파일에서 읽습니다. 조건부로 파일을 포함 시키려면 include ()를 사용하십시오. 그러나 require ()가 발생하는 행이 실행되지 않으면 대상 파일의 코드가 실행되지 않습니다. 반대의 말을하는 것 같습니까, 아니면 오해입니까?
lorless

1
이 모든 의견은 편집하기 전에이 답변의 원래 버전을 참조합니다. 원래 if (false) require 'file.php';'file.php'가로드되지만 실행되지는 않는다고 주장하는 잘못된 클레임이있었습니다 . TLDR은 이러한 모든 의견을 무시합니다.
Kevin Wheeler


5

사용하다 include 당신이 당신의 스크립트 (경우에는 등 존재하지 않는) 파일을로드하지 않고 계속 괜찮다면 당신이 (당신은 안하지만) 경고 오류 메시지와 라이브가 표시 될 수 있습니다.

를 사용 require하면 지정된 파일을로드 할 수 없으면 치명적인 오류가 발생하면 스크립트가 중지됩니다.


2

다른 사람들이 지적했듯이 유일한 차이점은 요구하면 치명적인 오류가 발생하고 잡을 수있는 경고가 포함된다는 것입니다. 어느 것을 사용 해야하는지에 대한 조언은 포함시키는 것입니다. 왜? 최종 사용자에게 경고를 표시하고 의미있는 피드백을 생성 할 수 있기 때문입니다. 치다

  // Example 1.
  // users see a standard php error message or a blank screen
  // depending on your display_errors setting
  require 'not_there'; 


  // Example 2.
  // users see a meaningful error message
  try {
      include 'not_there';
  } catch(Exception $e) {
     echo "something strange happened!";
  }

NB : 예를 들어 작동하려면 여기 http://www.php.net/manual/en/class.errorexception.php에 설명 된대로 오류 대 예외 처리기를 설치해야합니다 .

  function exception_error_handler($errno, $errstr, $errfile, $errline ) {
     throw new ErrorException($errstr, 0, $errno, $errfile, $errline);
  }
  set_error_handler("exception_error_handler");   

포함 수준에서 기대하는 파일이 없다는 것을 배우기에 좋은 곳이 아닙니다. 귀하의 예에서 문제가되는 것은 웹 사이트 시청자를 밀어내는 것입니다.
Kzqai

0
<?PHP
echo "Firstline";
include('classes/connection.php');
echo "I will run if include but not on Require";
?>

코드가있는 매우 간단한 실용적인 예입니다. 첫 번째 에코가 표시됩니다. 포함 또는 필수 전에 실행되기 때문에 사용하거나 포함하든 상관 없습니다.

결과를 확인하려면 코드의 두 번째 줄에서 의도적으로 파일의 잘못된 경로를 제공하거나 파일 이름에 오류를 만드십시오. 따라서 두 번째 에코 표시하거나 사용 여부에 전적으로 의존하지 않습니다 필요 또는 포함 .

당신이 사용하는 경우 필요로 두 번째 에코는 실행되지 않습니다하지만 당신이 사용하는 경우 어떤 오류 것은 너무 두 번째 에코의 결과를 볼 것이다 오는 문제가 아니다.


-2

Include Program이 브라우저에서 종료되지 않고 경고를 표시하는 경우 파일을 찾을 수없는 경우 프로그램이 종료되고 치명적 오류가 표시됩니다.


이미 2/3 년 된 질문에 부딪쳐서 2/3의 답변이 이미 말한 것을 반복해야 했습니까?
cHao

4
아, 그는 초보자입니다! 아마도 SO의 개념을 아직 이해하지 못했을 것입니다.
Dan Hanly 2013

가난한 user2069222은, 지금은 SO 왼쪽 : '(
Gagantous
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.