آشنایی با دستورات include و require

05 مرداد 1398
درسنامه درس 16 از سری آموزش PHP 7
آشنایی با دستورات include و require

دستورات include و require در PHP کدهای درون یک فایل را به کدهای فایل دیگری پیوست می کنند تا فایل دوم بتواند از کدهای فایل اول استفاده کند و از دوباره نویسی جلوگیری شود. به زبان ساده تر این دستورات تمام کدهای یک فایل را گرفته و در فایل مقصد کپی می کنند.

مزایای زیادی برای این کار وجود دارد؛ به طور مثال می توانیم با استفاده از این دستورات کار modulation را انجام دهیم. modulation یعنی کدهای برنامه ی خود را در چندین فایل مختلف و بر اساس نظمی خاص تقسیم بندی کنیم. به طور مثال قسمت پنل کاربران را در یک فایل بنویسیم و قسمت مدیران را در یک فایل دیگر، یا به طور مثال توابع کار با پایگاه داده را در یک فایل جمع کنیم و توابع مربوط به فرآیند ثبت نام را در فایلی دیگر قرار دهیم. مزایای استفاده از دستورات include و require زیاد است و در مواقع مختلفی کاربرد دارند.

نکته: این دو دستور قبل از اجرا شدن اسکریپت ها توسط سرور کار می کنند. اهمیت این مسئله در این است که کاربر نیازی به ارسال درخواست های مختلف ندارد بلکه با یک درخواست، سرور تمامی این فایل ها را (در صورتی که دستور include و require داشته باشند) به هم پیوست می کند و سپس آن ها را اجرا می کند.

یکی از استفاده های رایج دستورات include و require بدین صورت است که به جای نوشتن header و footer برای هر فایل به صورت جداگانه و بالا بردن حجم کدها، یک بار header و footer را مینویسیم و آن ها را در فایل های مختلف include می کنیم. این کار نه تنها باعث کاهش حجم کدها می شود بلکه مدیریت کدها را بسیار ساده تر می کند، چرا که اگر بخواهید قسمتی از header یا Footer سایت خود را ویرایش کنید (مثلا شماره تلفن خود را عوض کنید) می توانید آن ها را از یک جا و فقط یک بار (برای تمام صفحات) ویرایش کنید نه اینکه ده ها فایل را ویرایش کنید.

ساختار کلی استفاده از این دو دستور به شکل زیر است:

include 'filename';

or

require 'filename';

مثال اول: footer سایت

فرض کنید یک footer ساده در فایلی به نام footer.php داشته باشیم:

<?php
echo "<p>Copyright &copy; 1999-" . date("Y") . " W3Schools.com</p>";
?>

این footer ساده برای نمایش علامت کپی رایت به همراه تاریخ است؛ اگر یادتان باشد جلسه ی قبل در مورد تاریخ و زمان صحبت کردیم و گفتیم که با استفاده از دستور ("date("Y می توانیم سال را به صوت خودکار به روز رسانی کنیم.

حالا می توانیم با دستور include آن را درون صفحه قرار دهیم:

<!DOCTYPE html>
<html>
<body>

<h1>Welcome to my home page!</h1>
<p>Some text.</p>
<p>Some more text.</p>
<?php include 'footer.php';?>

</body>
</html>

مشاهده ی خروجی

مثال دوم: منوی ساده

فرض کنید منوی خود را در فایل menu.php نوشته باشیم:

<?php
echo '<a href="/default.asp">Home</a> -
<a href="/html/default.asp">HTML Tutorial</a> -
<a href="/css/default.asp">CSS Tutorial</a> -
<a href="/js/default.asp">JavaScript Tutorial</a> -
<a href="default.asp">PHP Tutorial</a>';
?>

تمام صفحات سایت ما باید از این منو استفاده کنند بنابراین با کد زیر می توانیم این کار را انجام دهیم:

<!DOCTYPE html>
<html>
<body>

<div class="menu">
<?php include 'menu.php';?>
</div>

<h1>Welcome to my home page!</h1>
<p>Some text.</p>
<p>Some more text.</p>

</body>
</html>

مشاهده ی خروجی

مثال سوم: متغیرها

فرض کنید فایلی به نام vars.php و در آن دو متغیر زیر را داشته باشیم:

<?php
$color='red';
$car='BMW';
?>

حالا اگر فایل vars.php را در فایل دیگری include کنید می توانید از متغیرهای آن استفاده کنید:

<!DOCTYPE html>
<html>
<body>

<h1>Welcome to my home page!</h1>
<?php include 'vars.php';
echo "I have a $color $car.";
?>

</body>
</html>

مشاهده ی خروجی

تفاوت عملی include و require

سوال: تفاوت بین include و require چیست؟

پاسخ: اگر دستور include کردن فایلی را بدهیم اما به هر دلیلی عملیات موفقیت آمیز نباشد (آدرس فایل را اشتباه داده باشیم، فایل وجود نداشته باشد و الی آخر) یک warning (هشدار از نوع E_WARNING) می گیریم بنابراین اجرای برنامه متوقف نمی شود اما اگر از دستور require استفاده کرده باشیم به جای هشدار خطای fatal error (از نوع E_COMPILE_ERROR) دریافت می کنیم و اجرای برنامه کاملا متوقف خواهد شد.

بنابراین اگر فایل شما آنچنان اهمیتی ندارد و برنامه تان می تواند بدون وجود آن کار کند می توانید از دستور include استفاده کنید اما اگر فایل مورد نظر برای اجرای برنامه حیاتی است (مثلا فایل فریم ورک شما است، فایل CMS یا کدهای و توابع خاص php شما است و ...) باید از دستور require استفاده کنید. اگر این کار را نکنید ممکن است اطلاعات حساس یا فایل های حیاتی سیستم را در اختیار کاربران قرار دهید که به نوبه ی خود می تواند بسیار خطرناک باشد.

در مثال زیر آدرس فایل را اشتباه داده ایم. توجه کنید که هنوز هم اسکریپت ما اجرا می شود ولی به متغیر ها دسترسی نداریم:

<!DOCTYPE html>
<html>
<body>

<h1>Welcome to my home page!</h1>
<?php include 'noFileExists.php';
echo "I have a $color $car.";
?>

</body>
</html>

مشاهده ی خروجی

اما اگر از دستور require استفاده کنیم:

<!DOCTYPE html>
<html>
<body>

<h1>Welcome to my home page!</h1>
<?php require 'noFileExists.php';
echo "I have a $color $car.";
?>

</body>
</html>

مشاهده ی خروجی

همانطور که می بینید تگ HTML نمایش داده می شود اما حتی یک خط از کدهای PHP ما نمایش داده نخواهند شد. این تفاوت را می توان از معنای این لغات نیز فهمید؛ require یعنی لازم داشتن (الزامی بودن) اما include یعنی شامل کردن!

نکته: علاوه بر دستورات include و require دستورات دیگری به نام های require_once  و include_once نیز وجود دارند. تفاوت این ها این است که include و require هر بار سند مورد نظر را بارگذاری می کنند اما  require_once  و include_once تنها زمانی چیزی را require یا include می کنند که قبلا require یا include نشده باشد. واقعیت این است که تقریبا کسی از دستورات require_once و include_once استفاده نمی کند مگر در موارد خاص.

امیدواریم درس آموزش کاربرد include و require در php برای شما مفید بوده باشد. نظرات خود را با ما درمیان بگذارید.

تمام فصل‌های سری ترتیبی که روکسو برای مطالعه‌ی دروس سری آموزش PHP 7 توصیه می‌کند:
نویسنده شوید
دیدگاه‌های شما (1 دیدگاه)

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

fateme
13 شهریور 1400
سلام مقاله بسیار عالی و جامع بود و در عین حال کاملا به راحتی مطلب را درک میکنی و ممنون بابت این مقاله پیروز پایدار باشید.

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.