Apakah ada perbedaan di antara mereka? Apakah menggunakannya adalah masalah preferensi? Apakah menggunakan salah satu dari yang lain menghasilkan keuntungan? Mana yang lebih baik untuk keamanan?
Selalu gunakan "wajib". "termasuk" senyaman pintu listrik di sauna.
Marco Mariani
2
@MarcoMariani Bagaimana itu tidak nyaman? Mungkin jelas, saya tidak melihatnya. Mungkin uapnya?
Austin Burk
Sederhananya, jika file 'foo.php' hilang karena kesalahan, saya ingin tahu sesegera mungkin, bukan ketika fungsi yang seharusnya ada di foo.php dipanggil. Mengganti termasuk dengan harus sering dapat mengungkapkan bug. Katakanlah config.php tidak ada, dan aplikasi berjalan dengan konfigurasi default. Mana yang lebih baik untuk keamanan? Adapun sauna, ketika saya di dalam dan pintu tidak terbuka karena alasan tertentu saya tidak suka itu.
Marco Mariani
Jawaban:
148
Anda menemukan perbedaan yang dijelaskan dalam manual PHP terperinci di halamanrequire :
requireidentik dengan includekecuali pada kegagalan itu juga akan menghasilkan E_COMPILE_ERRORkesalahan tingkat fatal . Dengan kata lain, itu akan menghentikan skrip sedangkan menyertakan hanya memancarkan peringatan ( E_WARNING) yang memungkinkan skrip untuk melanjutkan.
tiposaurus.co.uk/2011/04/04/04 ... "Perbedaan utama antara require () dan include () adalah bahwa jika Anda memerlukan () file yang tidak dapat dimuat (mis. jika tidak ada) maka itu menghasilkan kesalahan fatal yang akan menghentikan eksekusi halaman sepenuhnya, dan tidak ada lagi output akan dihasilkan. Di sisi lain, jika Anda memasukkan () file yang tidak dapat dimuat, maka ini hanya akan menghasilkan peringatan dan lanjutkan membangun halaman. "
stormwild
3
"Apa yang harus Anda gunakan tergantung pada situasinya; mengharuskan () paling cocok untuk memuat file yang penting untuk sisa halaman - misalnya jika Anda memiliki situs web yang digerakkan oleh basis data kemudian menggunakan keharusan () untuk memasukkan file yang berisi login dan kata sandi basis data lebih disukai daripada menggunakan include (). Jika Anda menggunakan include () dalam situasi ini, maka Anda mungkin menghasilkan lebih banyak peringatan dan kesalahan daripada yang Anda maksudkan. "
stormwild
3
<?php if (isset($flibbertygibbet)) require 'file.php';tampaknya membuat jawaban ini terlihat sangat salah. Kalau tidak, saya harus mendapatkan kesalahan fatal meskipun kondisinya tidak benar. stracebahkan tidak memperlihatkan PHP yang mencoba menyentuh file.php.
cHao
Tidak seperti include (), mengharuskan () akan selalu membaca di file target, bahkan jika baris itu tidak pernah dijalankan. Jika Anda ingin menyertakan file secara kondisional, gunakan include (). DAN Namun, jika baris yang memerlukan () terjadi tidak dieksekusi, kode di file target tidak akan dieksekusi. Tampaknya mengatakan hal yang sebaliknya, atau apakah saya salah paham?
lorless
1
Semua komentar ini merujuk ke versi asli dari jawaban ini sebelum diedit. Awalnya ada klaim yang tidak valid, mengklaim itu if (false) require 'file.php';akan menyebabkan 'file.php' dimuat (tetapi tidak dieksekusi). TLDR mengabaikan semua komentar ini.
Kevin Wheeler
181
requireakan menyebabkan PHP Fatal Error jika file tidak dapat dimuat. (Eksekusi berhenti)
includemenghasilkan Peringatan jika file tidak dapat dimuat. (Eksekusi berlanjut)
Gunakan includejika Anda tidak keberatan skrip Anda berlanjut tanpa memuat file (kalau-kalau tidak ada dll) dan Anda dapat (meskipun tidak seharusnya) hidup dengan pesan kesalahan Peringatan ditampilkan.
Menggunakan requireberarti skrip Anda akan berhenti jika tidak dapat memuat file yang ditentukan, dan melemparkan kesalahan fatal.
Seperti yang ditunjukkan orang lain, satu-satunya perbedaan adalah yang mengharuskan melempar kesalahan fatal, dan termasuk - peringatan yang bisa ditangkap. Adapun yang harus digunakan, saran saya adalah tetap menyertakan. Mengapa? karena Anda dapat menangkap peringatan dan menghasilkan umpan balik yang berarti bagi pengguna akhir. Mempertimbangkan
// Example 1.// users see a standard php error message or a blank screen// depending on your display_errors settingrequire'not_there';// Example 2.// users see a meaningful error messagetry{
include 'not_there';}catch(Exception $e){
echo "something strange happened!";}
Pada tingkat inklusi bukan tempat yang bagus untuk mengetahui bahwa file yang Anda harapkan tidak ada. Tidak ada masalah dalam contoh Anda yang satu untuk mendorong pemirsa situs web Anda.
Kzqai
0
<?PHP
echo "Firstline";
include('classes/connection.php');
echo "I will run if include but not on Require";?>
Contoh Praktis yang sangat sederhana dengan kode.
Gema pertama akan ditampilkan. Tidak masalah Anda menggunakan termasuk atau memerlukan karena berjalan sebelum memasukkan atau diperlukan.
Untuk memeriksa hasilnya, pada baris kedua kode dengan sengaja memberikan jalur yang salah ke file atau membuat kesalahan dalam nama file. Dengan demikian gema kedua yang akan ditampilkan atau tidak akan sepenuhnya tergantung pada apakah Anda menggunakan mengharuskan atau menyertakan .
Jika Anda menggunakan memerlukan gema kedua tidak akan mengeksekusi tetapi jika Anda menggunakan termasuk tidak peduli apa kesalahan datang Anda akan melihat hasil gema kedua juga.
Seandainya Program Sertakan tidak akan berhenti dan menampilkan peringatan di browser, Di sisi lain Memerlukan program akan berakhir dan menampilkan kesalahan fatal jika file tidak ditemukan.
Jawaban:
Anda menemukan perbedaan yang dijelaskan dalam manual PHP terperinci di halaman
require
:Lihat jawaban @ efritz sebagai contoh
sumber
<?php if (isset($flibbertygibbet)) require 'file.php';
tampaknya membuat jawaban ini terlihat sangat salah. Kalau tidak, saya harus mendapatkan kesalahan fatal meskipun kondisinya tidak benar.strace
bahkan tidak memperlihatkan PHP yang mencoba menyentuhfile.php
.if (false) require 'file.php';
akan menyebabkan 'file.php' dimuat (tetapi tidak dieksekusi). TLDR mengabaikan semua komentar ini.require
akan menyebabkan PHP Fatal Error jika file tidak dapat dimuat. (Eksekusi berhenti)include
menghasilkan Peringatan jika file tidak dapat dimuat. (Eksekusi berlanjut)Berikut ini adalah ilustrasi yang bagus untuk menyertakan dan membutuhkan perbedaan :
sumber
Gunakan
include
jika Anda tidak keberatan skrip Anda berlanjut tanpa memuat file (kalau-kalau tidak ada dll) dan Anda dapat (meskipun tidak seharusnya) hidup dengan pesan kesalahan Peringatan ditampilkan.Menggunakan
require
berarti skrip Anda akan berhenti jika tidak dapat memuat file yang ditentukan, dan melemparkan kesalahan fatal.sumber
Seperti yang ditunjukkan orang lain, satu-satunya perbedaan adalah yang mengharuskan melempar kesalahan fatal, dan termasuk - peringatan yang bisa ditangkap. Adapun yang harus digunakan, saran saya adalah tetap menyertakan. Mengapa? karena Anda dapat menangkap peringatan dan menghasilkan umpan balik yang berarti bagi pengguna akhir. Mempertimbangkan
NB: misalnya 2 untuk bekerja, Anda perlu menginstal penangan kesalahan-ke-pengecualian, seperti yang dijelaskan di sini http://www.php.net/manual/en/class.errorexception.php
sumber
Contoh Praktis yang sangat sederhana dengan kode. Gema pertama akan ditampilkan. Tidak masalah Anda menggunakan termasuk atau memerlukan karena berjalan sebelum memasukkan atau diperlukan.
Untuk memeriksa hasilnya, pada baris kedua kode dengan sengaja memberikan jalur yang salah ke file atau membuat kesalahan dalam nama file. Dengan demikian gema kedua yang akan ditampilkan atau tidak akan sepenuhnya tergantung pada apakah Anda menggunakan mengharuskan atau menyertakan .
Jika Anda menggunakan memerlukan gema kedua tidak akan mengeksekusi tetapi jika Anda menggunakan termasuk tidak peduli apa kesalahan datang Anda akan melihat hasil gema kedua juga.
sumber
Seandainya Program Sertakan tidak akan berhenti dan menampilkan peringatan di browser, Di sisi lain Memerlukan program akan berakhir dan menampilkan kesalahan fatal jika file tidak ditemukan.
sumber