2010-09-03 25 views
165

Có sự khác biệt nào giữa chúng không? Sử dụng chúng có phải là vấn đề ưu tiên không? Có sử dụng một trong những khác sản xuất bất kỳ lợi thế? Mà là tốt hơn cho an ninh?Sự khác biệt giữa "bao gồm" và "yêu cầu" trong php

+4

bản sao có thể có của [Khi nào tôi nên sử dụng require_once vs include?] (Http://stackoverflow.com/questions/2418473/when-should-i-use-require-once-vs-include) – Gordon

+3

Luôn sử dụng "yêu cầu ". "bao gồm" là thuận tiện như một cánh cửa điện trong phòng tắm hơi. –

+2

@MarcoMariani Điều đó sẽ bất tiện như thế nào? Nó có thể rõ ràng, tôi chỉ không nhìn thấy nó. Có lẽ hơi nước? –

Trả lời

138

Bạn tìm thấy sự khác biệt được giải thích trong PHP hướng dẫn chi tiết về the page of require:

require giống hệt với include ngoại trừ khi không thành công, nó cũng sẽ gây ra lỗi nghiêm trọng E_COMPILE_ERROR. Nói cách khác, nó sẽ tạm dừng tập lệnh trong khi chỉ bao gồm phát ra cảnh báo (E_WARNING) cho phép tập lệnh tiếp tục.

Xem @efritz's answer cho một ví dụ

+5

http://www.tiposaurus.co.uk/2011/04/04/the-difference-between-require-and-include/ "Sự khác biệt chính giữa require() và include() là nếu bạn yêu cầu() một tệp không thể tải (ví dụ: nếu nó không có) thì nó tạo ra một lỗi nghiêm trọng sẽ ngăn chặn việc thực thi Tuy nhiên, nếu bạn bao gồm() một tệp không thể tải được, thì điều này sẽ chỉ tạo ra cảnh báo và tiếp tục xây dựng trang. " – stormwild

+3

"Điều bạn nên sử dụng phụ thuộc vào tình huống; yêu cầu() phù hợp nhất để tải các tệp cần thiết cho phần còn lại của trang - ví dụ: nếu bạn có một trang web được điều hướng cơ sở dữ liệu thì sử dụng require() để bao gồm tệp chứa Nếu bạn sử dụng include() trong tình huống này, thì bạn có thể sẽ tạo ra nhiều cảnh báo và lỗi hơn bạn dự định. " – stormwild

+3

' cHao

175

require sẽ phát sinh lỗi PHP Fatal nếu không thể tải tệp. (Thực hiện dừng)

include tạo Cảnh báo nếu không thể tải tệp. (Thực hiện tiếp tục)

Đây là một đẹp illustration of include and require difference:

enter image description here

Từ:Difference require vs. include php (by Robert; Nov 2012)

+1

liên kết bị hỏng –

+0

Đó là câu trả lời 6 năm tuổi ... – efritz

+0

Xem sự khác biệt về ảnh chụp màn hình giữa chức năng bao gồm và yêu cầu, http://whats-online.info/science-and-tutorials/83/Free-Beginner -PHP-Hướng dẫn --- Bao gồm-và-yêu cầu-chức năng/... –

4

Sử dụng include nếu bạn không nhớ kịch bản của bạn tiếp tục mà không cần tải tập tin (trong trường hợp nó không tồn tại vv) và bạn có thể (mặc dù bạn không nên) sống với một thông báo lỗi cảnh báo được hiển thị.

Sử dụng require có nghĩa là tập lệnh của bạn sẽ tạm dừng nếu tập lệnh không thể tải tệp được chỉ định và ném lỗi nghiêm trọng.

1

Như những người khác đã chỉ ra, sự khác biệt duy nhất là yêu cầu ném một lỗi nghiêm trọng và bao gồm - cảnh báo có thể bắt được. Đối với cái nào để sử dụng, lời khuyên của tôi là dính vào bao gồm. Tại sao? vì bạn có thể nhận được cảnh báo và đưa ra phản hồi có ý nghĩa cho người dùng cuối. Cân nhắc

// 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: ví dụ 2 để làm việc bạn cần phải cài đặt một trình xử lý lỗi-to-trường hợp ngoại lệ, như mô tả ở đây 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"); 
+0

Ở mức độ bao gồm không phải là một nơi tuyệt vời để biết rằng tệp bạn đang mong đợi không có ở đó. Không có vấn đề gì trong ví dụ của bạn là một vấn đề để thúc đẩy người xem trang web của bạn. – Kzqai

3

Sự khác biệt chính giữa require()include() là nếu bạn require() một tệp không thể tải (ví dụ: nếu nó không có ở đó) thì nó sẽ tạo ra một lỗi nghiêm trọng, nó sẽ tạm dừng việc thực hiện hoàn toàn trang và không có thêm đầu ra nào được tạo ra. Mặt khác, nếu bạn include() một tệp không thể tải được, thì điều này sẽ chỉ tạo cảnh báo và tiếp tục xây dựng trang.

-2

Trong trường hợp Chương trình bao gồm sẽ không chấm dứt và hiển thị cảnh báo trên trình duyệt, Mặt khác, chương trình yêu cầu sẽ chấm dứt và hiển thị lỗi nghiêm trọng trong trường hợp không tìm thấy tệp.

+0

Bạn có thực sự phải va chạm một câu hỏi 2 năm tuổi để lặp lại 2/3 câu trả lời đã nói ...? – cHao

+4

Aww, anh ấy là người mới! Có lẽ không hiểu khái niệm về SO. –

+2

Tôi nói bằng những từ đơn giản ... !!! –

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

Ví dụ thực tế rất đơn giản với mã. Tiếng vọng đầu tiên sẽ được hiển thị. Không có vấn đề bạn sử dụng bao gồm hoặc yêu cầu bởi vì nó chạy trước khi bao gồm hoặc yêu cầu.

Để kiểm tra kết quả, trong dòng thứ hai của mã cố ý cung cấp đường dẫn sai cho tệp hoặc tạo lỗi trong tên tệp. Vì vậy, tiếng vang thứ hai được hiển thị hay không sẽ hoàn toàn phụ thuộc vào việc bạn sử dụng yêu cầu hoặc bao gồm.

Nếu bạn sử dụng đòi hỏi tiếng vang thứ hai sẽ không thực hiện nhưng nếu bạn sử dụng bao gồm không có vấn đề gì lỗi đến bạn sẽ thấy những kết quả của echo thứ hai quá.

Các vấn đề liên quan