Có sự khác biệt nào giữa chúng không? Là sử dụng chúng là một vấn đề ưu tiên? Việc sử dụng cái này có tạo ra lợi thế nào không? Cái nào tốt hơn cho an ninh?
Có sự khác biệt nào giữa chúng không? Là sử dụng chúng là một vấn đề ưu tiên? Việc sử dụng cái này có tạo ra lợi thế nào không? Cái nào tốt hơn cho an ninh?
Câu trả lời:
Bạn tìm thấy sự khác biệt được giải thích trong hướng dẫn chi tiết về PHP trên trangrequire
:
require
là giống hệt nhưinclude
ngoại trừ khi thất bại, nó cũng sẽ tạo ra mộtE_COMPILE_ERROR
lỗi nghiêm trọng . 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 câu trả lời của @ efritz để biết ví dụ
<?php if (isset($flibbertygibbet)) require 'file.php';
dường như làm cho câu trả lời này trông hoàn toàn không chính xác. Nếu không, tôi sẽ nhận được một lỗi nghiêm trọng mặc dù điều kiện không đúng. strace
không hiển thị PHP thậm chí đang cố gắng chạm vào file.php
.
if (false) require 'file.php';
sẽ khiến 'file.php' được tải (nhưng không được thực thi). TLDR bỏ qua tất cả các ý kiến.
require
sẽ đưa ra một lỗi nghiêm trọng PHP nếu tập tin không thể được tải. (Dừng thực thi)
include
tạo Cảnh báo nếu tệp không thể được tải. (Tiếp tục thực hiện)
Dưới đây là một minh họa đẹp bao gồm và yêu cầu sự khác biệt :
Từ: Sự khác biệt yêu cầu so với bao gồm php (của Robert; tháng 11 năm 2012)
Sử dụng include
nếu bạn không nhớ tập lệnh của mình tiếp tục mà không tải tệp (trong trường hợp nó không tồn tại, v.v.) và bạn có thể (mặc dù bạn không nên) sống với 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ẽ dừng nếu nó không thể tải tệp được chỉ định và gây ra lỗi nghiêm trọng.
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 - một cảnh báo có thể bắt được. Đối với một trong những để sử dụng, lời khuyên của tôi là dính vào. Tại sao? bởi vì bạn có thể bắt được cảnh báo và đưa ra phản hồi có ý nghĩa cho người dùng cuối. Xem xét
// 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 để hoạt động, bạn cần cài đặt trình xử lý lỗi ngoại lệ, như được 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");
<?PHP
echo "Firstline";
include('classes/connection.php');
echo "I will run if include but not on Require";
?>
Một ví dụ thực tế rất đơn giản với mã. Tiếng vang đầ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 bao gồm hoặc yêu cầu.
Để kiểm tra kết quả, Trong dòng thứ hai của mã cố tình cung cấp đường dẫn sai đến tệp hoặc mắc lỗi trong tên tệp. Do đó, 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 hay bao gồm .
Nếu bạn sử dụng yêu cầu 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ì xảy ra, bạn cũng sẽ thấy kết quả của tiếng vang thứ hai.
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.