그들 사이에 차이점이 있습니까? 그것들을 선호의 문제로 사용하고 있습니까? 다른 것을 사용하면 어떤 이점이 있습니까? 어느 것이 보안에 더 좋습니까?
그들 사이에 차이점이 있습니까? 그것들을 선호의 문제로 사용하고 있습니까? 다른 것을 사용하면 어떤 이점이 있습니까? 어느 것이 보안에 더 좋습니까?
답변:
차이점 페이지require
에서 자세한 PHP 매뉴얼에 설명되어 있습니다 .
require
~와 동일하다include
실패시 제외하고는 치명적E_COMPILE_ERROR
수준의 오류 도 생성합니다 . 다시 말해, 스크립트는 스크립트를 정지시키는 반면 includeE_WARNING
는 스크립트를 계속할 수있게 하는 경고 ( ) 만 방출합니다 .
참조 efritz의 대답 @예를 들어 을
<?php if (isset($flibbertygibbet)) require 'file.php';
이 답변이 완전히 잘못된 것처럼 보입니다. 그렇지 않으면 조건이 사실이 아니더라도 치명적인 오류가 발생합니다. strace
을 터치하려고해도 PHP가 표시되지 않습니다 file.php
.
if (false) require 'file.php';
'file.php'가로드되지만 실행되지는 않는다고 주장하는 잘못된 클레임이있었습니다 . TLDR은 이러한 모든 의견을 무시합니다.
require
파일을로드 할 수없는 경우 PHP 치명적 오류가 발생합니다. (실행 정지)
include
파일을로드 할 수없는 경우 경고를 생성합니다. (실행 계속)
다음은 include를 포함하고 차이를 요구 하는 멋진 그림입니다 .
다른 사람들이 지적했듯이 유일한 차이점은 요구하면 치명적인 오류가 발생하고 잡을 수있는 경고가 포함된다는 것입니다. 어느 것을 사용 해야하는지에 대한 조언은 포함시키는 것입니다. 왜? 최종 사용자에게 경고를 표시하고 의미있는 피드백을 생성 할 수 있기 때문입니다. 치다
// 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");
<?PHP
echo "Firstline";
include('classes/connection.php');
echo "I will run if include but not on Require";
?>
코드가있는 매우 간단한 실용적인 예입니다. 첫 번째 에코가 표시됩니다. 포함 또는 필수 전에 실행되기 때문에 사용하거나 포함하든 상관 없습니다.
결과를 확인하려면 코드의 두 번째 줄에서 의도적으로 파일의 잘못된 경로를 제공하거나 파일 이름에 오류를 만드십시오. 따라서 두 번째 에코 표시하거나 사용 여부에 전적으로 의존하지 않습니다 필요 또는 포함 .
당신이 사용하는 경우 필요로 두 번째 에코는 실행되지 않습니다하지만 당신이 사용하는 경우 등 어떤 오류 것은 너무 두 번째 에코의 결과를 볼 것이다 오는 문제가 아니다.
Include Program이 브라우저에서 종료되지 않고 경고를 표시하는 경우 파일을 찾을 수없는 경우 프로그램이 종료되고 치명적 오류가 표시됩니다.