دو دستور require و include در زبان php به منظور اضافه کردن یک فایل دیگر به فایلمون استفاده میشه کاربر این دستور مشابه هم است ولی یک تفاوت اساسی با یکدیگر دارن که مشخص میکنه در یک پروژه از ریکوایر استفاده کنیم یا اینکلود!!!
در صورتی که از require استفاده میکنی باید بدونی که اگر فایلی که require کردی وجود نداشته باشه( به علتهای اشتباه وارد نمودن آدرس فایل، وجود نداشتن فایل و سایر موارد) کدهای php تون یک خطای Fatal یا اصولا Fatal error میده و توی همون خط برنامه متوقف میشه و دیگه به کارش ادامه نمیده!! شما در صورتی که بخواید سایر خطوط بعد از require اجرا بشن باید مشکل این خط رو حل کنی.
در صورتی که از include استفاده میکنی باید بدونی که فایلی رو که که include کردی وجود نداشته باشد( به علتهای اشتباه وارد نمودن آدرس فایل، وجود نداشتن فایل و سایر موارد) نگران نباشی چون که کدهای php یه هشدار یا warning میده و چون که هشدار داده به کارش ادامه میده و بقیه دستورات بعد از require رو اجرا میکنه، البته به این راحتی ها هم نیست!! اگه با خطایی برخورد کنه متوقف میشه.
مثلا یک سند php با نام header.php درست میکنیم و کدهای زیر رو داخل اون مینویسم:
<header> <h1>A heading here</h1> </header>
سپس در کنار سند header.php یک سند دیگر با نام index.php میسازیم و در آن سند کدهای زیر قرار داده خواهد شد.
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>بررسی تفاوت بین require و include</title> </head> <body> <?php require('header.php') ?> <main> <h1>Most Popular Browsers</h1> <p>....</p> </main> </body> </html>
همانطور که مشاهده میکنید، در کدهای بالا فایل header.php ریکوایر شده و از آنجایی که فایل header.php در کنار فایل index.php وجود دارد به درستی عمل کرده و مشکلی پیش نمیآید. و نتیجه خروجی آن در مروگر به صورت شکل زیر میباشد.
حال در صورتی که فایل header.php موجود نباشد نتیجه اجرای فایل index.php که در بالا نوشته بودیم به صورت زیر خواهد بود.
همانطور که در شکل بالا مشاهده میکنید در صورتی که ما فایلی را require کنیم و آن فایل موجود نباشد برنامه ما خطا (error ) داده و این باعث میگردد که سایر خطوط برنامه اجرا نشود وما فقط متن خطا را مشاهده کنیم.
حال در صورتی که فایل header.php را در سندمان include کنیم، مطابق تکه کد زیر:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>بررسی تفاوت بین require و include</title> </head> <body> <?php include('header.php') ?> <main> <h1>Most Popular Browsers</h1> <p>....</p> </main> </body> </html>
همانطور که مشاهده میکنید، در کدهای بالا فایل header.php اینکلود شده و از آنجایی که فایل header.php در کنار فایل index.php وجود دارد به درستی عمل کرده و مشکلی پیش نمیآید. و نتیجه خروجی آن در مروگر به صورت شکل زیر میباشد.
حال در صورتی که فایل header.php در سند وجود نداشته باشد نتیجه اجرای فایل index.php که در بالا با استفاده از include نوشته بود به صورت زیر خواهد بود.
همانطور که در شکل بالا مشاهده میکنید در صورتی که ما فایلی را include کنیم و آن فایل موجود نباشد برنامه ما هشدار (warning) داده و این بر خلاف require بود که باعث خطا (error) میگردد و به این نکته توجه داشته باشید که
اگر برنامه warning یا هشدار دهد سایر خطوط بعد از هشدار اجرا خواهد شد.
از همین رو هست که در تصویر بالا هشدار داده است که فایل header.php وجود ندارد اما سایر موارد در صفحه را نیز اجرا کرده است و متن Most Popular Browsers و ... را نمایش داده است در حالی که در حالت require اینگونه نبود.
جمع بندی آخر
میشه یک جمع بندی کنی که
اگر دستور include کردن یک فایل رو بنویسیم اما این دستور به هر علتی ( عدم وجود فایل، آدرس اشتباه و ...) موفقیت آمیز نباشه یک warning میگیریم لذا اجرای برناممون متوقف نمیشه اما اگر از دستور require استفاده کنیم برنامه به جای هشدار با خطا fatal error مواجه شده و به صورت کامل متوقف میشود.
( واقعا سردرگم شدم!!)
فایلی که قراره با استفاده از این دو دستور به سندتون اضافه کنید اگر اهمیت چندانی از نظر بود یا نبود برای شما ندارد، میتوانید از دستور include استفاده کنید اما اگر این فایل برای اجرای برنامه حیاتی است باید از دستور require استفاده کنید.