2012-02-19 6 views
2

이전 습관으로 인해 항상 include가 필요했습니다. 기본적으로이 두 함수는 똑같습니다. require가 파일이 존재하지 않아서 스크립트를 멈추게하는 경우 require를하는 것 외에 - include는 경고를 던지고 아무 일도 일어나지 않은 것처럼 스크립트를 계속 진행합니다.파일 포함 및 오류 처리

일반적으로 파일을 동적으로 포함 할 때 file_exists의 줄을 따라 뭔가를 사용합니다. 이 같은 상대 : 내가 틀렸다면

<?php if (file_exists($file)) { require $file; } else { /*error handling*/ } ?> 

를 지금까지 내가 아는 한,이 널리 가장 좋은 방법은 그것을 처리하는 가장 효율적인 방법으로 인정되고, 저를 수정하시기 바랍니다.

하지만 빠르고 스마트 한 내 의견에 약간 것 같다 다른 접근 방식, 생각 : 나는 아직 그것을 테스트하지 않은

<?php if (!include $file) { /* error handling */ } ?> 

, 그러나 그것은보다 더 빨리해야한다는 나에게 논리적 보인다 file_exists/include 콤보가 필요합니다. 포함 접근법이 필요로하는 하드 드라이브 상호 작용이 2 번 필요하기 때문입니다.

내 테스트에서 예상대로 작동합니다. 예상 범위를 상속하며이 변수에 설정된 변수에 액세스 할 수 있습니다.

이렇게하지 않는 이유가 있습니까?

편집 : 오타

편집 2 : 존재하지 않는 파일을 포함하려고 할 때이에 대한 하나 개의 인수가 던져 E_WARNING을 수 있습니다. 이를 포함하여 @를 전달하면 피할 수 있습니다. 이와 같이 :

<?php if([email protected] $file) { /* error */ } ?> 
+0

include 문의 반환 값은 반드시 1 또는 0 일 필요는 없습니다. 포함 된 파일의 return 문을 사용하여 배열을 반환 할 수 있습니다. 그 외에 메소드는 file_exists()보다 견고합니다 ... 파일 존재 확인 (또는 다른 검사)을 수행한다고해서 실제로 포함될 것이라는 것을 의미하지는 않습니다. – goat

답변

2

아니요, 이것은 "우수 사례"가 아닙니다.

당신거야 삼가지 경우 하나의 파일을 포함하여 수 :

  • 당신이 그것에서 기능을 필요로하는 경우 - 즉, 코드가 해당 파일이없는 상태에서 작동하지 않을 경우
  • 경우 코드에서 추가 기능을 제공하기 위해 해당 파일의 일부 기능을 사용할 수는 있지만 작동하지 않을 경우
  • 해당 파일을 포함하여 코드가 으로 향상 될 수 있지만이 파일 없이는 다르게 작동하지 않을 수 있습니다 (예 : SSL 라이브러리 대 순수 PHP를 대체로 사용하는 것; 또 다른 예는 모든하지만,이 그룹 및 당신이 "이 필요합니다"와

) 첫 번째 글 머리 기호와 함께가는로 계산하려고 마지막에 떨어지는 마지막으로,에 "나는이 라이브러리 중 하나가 필요"상황이 될 것입니다 여기에 표시되는 포함 패턴을 사용해야하는 유일한 경우는 두 번째 또는 세 번째 경우에 파일을 멋지게 만들 필요는없는 경우입니다. 첫 번째 경우에는 이 아니라이되어야합니다. require을 사용해야합니다. 두 번째 경우에는 if 문없이 include을 사용하는 것이 좋습니다. 세 번째 경우는 일 수 있으며은 조건부 include을 사용합니다 (아래 참조).프로그램을 탱킹없이 실패 include 문 적 에 기대할 수있는

관리의 일반적인 "가장 좋은 방법은"__autoload을 정의하고 그 사용자의 오류 수정, 파일의 존재 검사를 처리해야하는 것입니다 PHP 프로젝트에 포함 , 등등.

포함을 시도한 다음 실패를 감지하는 "빠를 것"이라고 가정합니다. 특히 실험적 데이터로 뒷받침되지 않는 마이크로 최적화가 모든 악의 근원입니다. 일 수도 있고 일 수도 있습니다. 먼저 문제가 있는지 확인하십시오. 예인 경우을 입력 한 다음 include 문이 런타임에 충분히 중요하기 때문에 프로그래머가 시간을 할애 할만한 가치가 있는지 확인하십시오. 그렇다면 대체 구현이 제대로 작동하는지 테스트하십시오. 그렇다면 두 버전 모두를 벤치마킹하고 대안이 더 빠른 지 확인하십시오. 그런 다음에 만 배포를 고려해야합니다.

+0

나는 당신과 동의한다 - 그러나 나는 당신이 언급하지 않은 하나의 추가 유스 케이스를 가지고있다. 나는 간단한 웹 응용 프로그램에서 간단한 요청 처리기로 파일을 동적으로 사용하고 있는데,이 경우에는 내가 실제로 찾은 접근 방식을 생각한다. 오류 처리는 대부분 404 페이지를 보여주는 것으로 구성됩니다. –

+0

@gustav 리디렉션을 사용해야합니다. 그렇지 않으면 모든 HTTP 상태 코드가 중단되고 캐싱됩니다. 또한 파일을 포함하는 것은 평가의 한 형태이기 때문에 사용자 요청에 대한 응답으로 파일을 처리하는 것은 매우 위험합니다.'.htpasswd' 파일을 평가하도록 요청하면 어떨까요? PHP에서 발생하는 구문 오류는 암호 데이터를 포함 할 수 있습니다. – Borealid

+0

파일을로드하기 전에 입력 내용의 유효성을 검사하고 있습니다. 문자와 숫자가 아닌 다른 것이라면, 나는 시도하기도 전에 404에 보낸다. 내 오류 처리는 데이터베이스에 이벤트를 등록하고 404 헤더를 보내는 것입니다. 나는 문자 그대로 404 페이지를 보여주는 것이 아니다. :-) –