มีความแตกต่างระหว่างพวกเขาหรือไม่? ใช้พวกเขาเป็นเรื่องของการตั้งค่าหรือไม่? การใช้งานมากกว่าที่อื่น ๆ จะสร้างความได้เปรียบหรือไม่? ระบบความปลอดภัยแบบไหนดีกว่ากัน?
มีความแตกต่างระหว่างพวกเขาหรือไม่? ใช้พวกเขาเป็นเรื่องของการตั้งค่าหรือไม่? การใช้งานมากกว่าที่อื่น ๆ จะสร้างความได้เปรียบหรือไม่? ระบบความปลอดภัยแบบไหนดีกว่ากัน?
คำตอบ:
คุณพบความแตกต่างที่อธิบายไว้ในคู่มือ PHP แบบละเอียดในหน้าของrequire
:
require
เหมือนกับinclude
ยกเว้นเมื่อล้มเหลวมันจะสร้างE_COMPILE_ERROR
ข้อผิดพลาดระดับร้ายแรง กล่าวอีกนัยหนึ่งมันจะหยุดสคริปต์ในขณะที่รวมเพียงปล่อยเตือน (E_WARNING
) ซึ่งช่วยให้สคริปต์เพื่อดำเนินการต่อ
ดูคำตอบของ @ efritzสำหรับตัวอย่าง
<?php if (isset($flibbertygibbet)) require 'file.php';
ดูเหมือนจะทำให้คำตอบนี้ดูไม่ถูกต้องทั้งหมด มิฉะนั้นฉันควรได้รับข้อผิดพลาดร้ายแรงถึงแม้ว่าเงื่อนไขไม่เป็นความจริง strace
ไม่แสดง PHP file.php
ได้พยายามที่จะสัมผัส
if (false) require 'file.php';
จะทำให้โหลด 'file.php' (แต่ไม่ได้ดำเนินการ) TLDR ไม่สนใจความคิดเห็นเหล่านี้ทั้งหมด
require
จะโยนข้อผิดพลาดร้ายแรงของ PHP หากไฟล์ไม่สามารถโหลดได้ (การหยุดการทำงาน)
include
สร้างคำเตือนหากไฟล์ไม่สามารถโหลดได้ (การดำเนินการต่อ)
นี่คือภาพประกอบที่ดีของการรวมและต้องการความแตกต่าง :
จาก: ความแตกต่างต้องการเทียบกับรวม php (โดย Robert; Nov 2012)
ใช้include
ถ้าคุณไม่รังเกียจสคริปต์ของคุณอย่างต่อเนื่องโดยไม่ต้องโหลดไฟล์ (ในกรณีที่มันไม่มีอยู่ ฯลฯ ) และคุณสามารถ (แม้ว่าคุณจะไม่ควร) อยู่กับข้อความแสดงข้อผิดพลาดคำเตือน
การใช้require
หมายถึงสคริปต์ของคุณจะหยุดถ้าไม่สามารถโหลดไฟล์ที่ระบุและโยนข้อผิดพลาดร้ายแรง
ดังที่คนอื่น ๆ ชี้ให้เห็นความแตกต่างเพียงอย่างเดียวคือต้องมีข้อผิดพลาดร้ายแรงและรวมถึง - คำเตือนที่จับได้ สำหรับคนที่จะใช้คำแนะนำของฉันคือการรวมถึง ทำไม? เพราะคุณสามารถเตือนและสร้างความคิดเห็นที่มีความหมายต่อผู้ใช้ปลายทางได้ พิจารณา
// 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!";
}
หมายเหตุ: สำหรับตัวอย่างที่ 2 เพื่อให้ทำงานได้คุณจะต้องติดตั้งตัวจัดการข้อผิดพลาดถึงข้อยกเว้นดังที่อธิบายไว้ที่นี่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";
?>
ตัวอย่างการปฏิบัติที่ง่ายมากพร้อมรหัส เสียงสะท้อนแรกจะปรากฏขึ้น ไม่ว่าคุณจะใช้การรวมหรือต้องการเนื่องจากการทำงานก่อนหน้าการรวมหรือจำเป็น
เพื่อตรวจสอบผลลัพธ์ในบรรทัดที่สองของรหัสจงใจให้เส้นทางที่ผิดไปยังไฟล์หรือทำผิดพลาดในชื่อไฟล์ ดังนั้นเสียงสะท้อนที่สองที่จะแสดงหรือไม่จะเป็นทั้งหมดขึ้นอยู่กับว่าคุณจะใช้ต้องหรือรวม
ถ้าคุณใช้ต้องการ echo ที่สองจะไม่ดำเนินการ แต่ถ้าคุณใช้รวมถึงไม่ว่าเกิดข้อผิดพลาดอะไรคุณจะเห็นผลลัพธ์ของ echo ที่สองด้วย
ในกรณีของโปรแกรมรวมจะไม่ยุติและแสดงคำเตือนบนเบราว์เซอร์ในทางกลับกันโปรแกรมที่ต้องการจะยุติและแสดงข้อผิดพลาดร้ายแรงในกรณีที่ไม่พบไฟล์