آموزش فراخوانی فایل در PHP و include کردن

با فراخوانی فایل‌ها در PHP می‌توانیم محتویات یک فایل را در فایلی دیگر وارد کنیم. به این صورت کدهای ما منظم‌تر شده و ویرایش آن‌ها آسان‌تر خواهد بود. در این آموزش ۲ روش اصلی وارد کردن فایل در PHP را آموخته و ترفندهای آن‌ها را بررسی می‌کنیم.

فرض کنید قطعه کدی در برنامه خود دارید که باید آن را در چند صفحه استفاده کنید. مثلاً:

  • فایل حاوی تنظیمات اتصال به دیتابیس (config.php)
  • کدهای مربوط به Header یا Footer سایت

کپی کردن این کدها در همه صفحات کار غیراستاندارد و غیرحرفه‌ای خواهد بود. چون اگر بخواهیم تغییر کوچکی در هدر سایت یا اطلاعات دیتابیس بدهیم، مجبوریم تمام فایل‌ها را ویرایش کرده تا به نتیجه برسیم!

در این‌گونه مواقع، از include و require برای افزودن محتوای یک فایل دیگر (فایل هدر یا config.php) به کدهای فایل فعلی استفاده می‌کنیم.

روش‌های فراخوانی فایل در PHP

در برنامه‌نویسی PHP دو روش برای افزودن فایل دیگر به فایل فعلی وجود دارد. این دو روش عبارت‌اند از:

  1. تابع include
  2. تابع require

هر دوی این توابع یک ورودی می‌گیرند که مسیر فایل مورد نظر برای فراخوانی است. این آدرس می‌تواند آدرسی نسبی (و روی سرور فعلی) یا یک فایل در آدرس و سرور دیگر باشد.

این آدرس به صورت یک رشته در PHP تعریف می‌شود. این مقدار را می‌توانیم به‌طور مستقیم در جلوی نام تابع قرار داده یا آن را درون پرانتز قرار دهیم.

include("path/filename");
include "path/filename";

require("path/filename");
require "path/filename";

فایل فراخوانی شده می‌تواند PHP، کدهای HTML یا یک فایل متنی txt ساده باشد. در هر صورت محتوای آن فایل در فایل فعلی ریخته خواهد شد.

در هنگام فراخوانی فایل PHP از روی مسیر نسبی روی سرور خودمان، کدهای موجود در فایل فراخوانی‌شده در فایل فراخوانی می‌شود. درصورتی‌که فراخوانی از روی آدرس و سرور دیگری انجام شود، دو حالت داریم:

  • اگر سرور مقابل توانایی اجرای PHP داشته باشد، خروجی اجرای فایل در فایل فعلی ریخته می‌شود.
  • اگر امکان اجرای کد PHP نداشته باشد، کدهای اجرا نشده درون فایل ما کپی خواهد شد.

شکل کلی از وارد کردن فایل در PHP
شکل کلی از وارد کردن فایل در PHP

تفاوت include و require

پیش از دیدن چند مثال و عملکرد این دو تابع، بهتر است تفاوت آن‌ها را بدانیم. اگر با تابع آشنایی ندارید، آموزش تابع در PHP را ببینید.

همان‌طور که از نام تابع require مشخص است، فایل‌هایی که حیاتی و اجباری هستند به‌وسیله این تابع فراخوانی می‌شوند.

اگر از تابع require برای فراخوانی فایل دیگر استفاده کنیم، در صورت ناموفق بودن فراخوانی، اجرای اسکریپت متوقف شده و بقیه کدهای درون آن فایل اجرا نمی‌شود.

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

اگر عملیات فراخوانی فایل ناموفق باشد، در استفاده از تابع require به خطا (Fatal Error) برخورد کرده اما در تابع include صرفاً یک هشدار (Warning) دریافت می‌کنیم.

آموزش include کردن فایل در PHP

وارد کردن فایل با هر دو دستور بسیار ساده است! فرض کنید یک فایل menu.php داریم که حاوی چند لینک برای منوی سایت ما است. محتویات این فایل به شکل زیر است:

<ul>
    <li>صفحه اصلی</li>
    <li>حساب کاربری</li>
    <li>امروز: <?php date("y-m-d") ?></li>
</ul>

این فایل در کنار فایل دیگری به نام index.php قرار دارد. در قطعه کد زیر، با استفاده از include فایل menu.php را در این فایل فراخوانی کرده‌ایم.

<html>
<body>
<div id="menu">
<?php include "menu.php"; ?>
</div>
<p>This is a Test!</p>
</body>
</html>

این قطعه کد مثل این عمل می‌کند که محتوای فایل menu را به‌طور مستقیم در آن قرار داده‌ایم. بنابراین در هنگام اجرا، کدهای فایل index به صورت زیر دیده می‌شود:

<html>
<body>
<div id="menu">
<ul>
    <li>صفحه اصلی</li>
    <li>حساب کاربری</li>
    <li>امروز: <?php date("y-m-d") ?></li>
</ul>
</div>
<p>This is a Test!</p>
</body>
</html>

دستور include_once

دستور include_once دقیقاً مشابه include استفاده شده و کاربرد دارد. تنها تفاوت آن این است که اگر فایل فراخوانی شده، قبلاً در همین فایل فراخوانی شده بود، فایل مورد نظر وارد نمی‌شود.

فرض کنید فایل config.php حاوی اطلاعاتی برای اتصال به پایگاه داده است. این فایل حاوی چهار متغیر زیر است:

<?php
$db_host = "localhost";
$db_name = "testdb";
$db_user = "testuser";
$db_pass = "testpass";
?>

مشابه کاری که در کار با دیتابیس در PHP می‌کنیم، برای فراخوانی این اطلاعات، از قطعه کدی مشابه زیر استفاده می‌کنیم:

<html>
<body>

<?php
    include_once 'config.php';
    echo $db_name;
?>
<!-- Some Codes... --->
<?php
    include_once 'config.php';
    echo $db_user;
?>

</body>
</html>

در خط دهم این کد، عملیات فراخوانی انجام نمی‌شود. چرا که قبلاً در خط پنجم فایل config.php فراخوانی شده است.

فایل‌هایی که می‌خواهیم فقط برای یک بار در فایل فراخوانی شوند را با استفاده از include_once فراخوانی می‌کنیم.

استفاده از require برای فراخوانی فایل در PHP

در ابتدای آموزش فهمیدیم که از require برای وارد کردن فایل‌ها در PHP استفاده می‌شود که فراخوانی آن‌ها ضروری است.

تابع require مشابه include محتوای فایل مورد نظر را کپی کرده و وارد فایل فعلی می‌کند؛ اما اگر فایل مورد نظر وجود نداشته باشد یا به هر دلیل نتوان آن را باز کرد، اجرای برنامه متوقف شده و با یک خطا مواجه خواهیم شد.

البته شما می‌توانید این خطاها را با try catch که در آموزش زیر معرفی شده مدیریت کنید تا سایت با مشکل مواجه نشود.

مدیریت استثنا در PHP با try catch + مثال عملی

مدیریت استثنا در PHP با try catch + مثال عملی

فرض کنید فایلی به نام notExists.php در کنار قطعه کد زیر وجود ندارد. ما فرض کردیم که درون آن یک متغیر به نام var وجود دارد. فایل را فراخوانی کرده و متغیر را استفاده می‌کنیم: (بیشتر بدانید: انواع متغیر در PHP)

<html>
<body>

<p>Hello!</p>
<?php
    require 'notExists.php';
    echo $var;
?>
<p>Some Paragraph</p>

</body>
</html>

اجرای کد بالا در خط ششم متوقف خواهد شد. یعنی خروجی صفحه به صورت زیر می‌شود:

Hello!

دلیل توقف اجرای کدها، عدم وجود فایل notExists.php است.

تفاوت require و require_once

مشابه تابع include، تابع require نیز یک حالت ویژه دارد. اگر برای فراخوانی فایلی از require_once در PHP استفاده کنیم، اگر آن فایل قبلاً فراخوانی شده بود، دیگر فراخوانی و کپی نمی‌شود.

معمولاً از دو تابع require و require_once برای فراخوانی و کپی محتوای فایل‌های حیاتی استفاده می‌شود. این فایل‌های حیاتی می‌توانند تنظیمات، توابع از پیش تعریف شده یا کدهای مهم دیگر باشند.

جمع‌بندی: آموزش فراخوانی فایل با include و require در PHP

در این مقاله آموزشی با دو روش فراخوانی فایل در PHP آشنا شدیم. برای استانداردسازی و ویرایش ساده‌تر برنامه، از توابع فراخوانی فایل در PHP زیاد استفاده می‌کنیم.

تابع include سعی در وارد کردن یک فایل می‌کرد. اگر این فراخوانی موفقیت‌آمیز نبود، مشکلی در روند اجرای برنامه به وجود نیامده و سایر کدها اجرا می‌شوند. تنها یک Warning در پس‌زمینه دریافت می‌کنیم.

از تابع require زمانی استفاده می‌شود که می‌خواهیم محتوای یک فایل مهم را در فایل فعلی وارد کنیم. اگر آن فایل وجود نداشته باشد یا مشکلی در وارد کردن آن داشته باشیم، بقیه کدهای صفحه اجرا نشده و برنامه با دادن یک Error در همان‌جا متوقف خواهد شد.

دو تابع include_once و require_once نیز مشابه همین دو تابع وجود دارند. با این تفاوت که اگر فایل فراخوانی شده، قبل‌تر فراخوانی شده بود، هیچ کار خاصی انجام نمی‌شود. در حقیقت از این دو تابع زمانی استفاده می‌کنیم که می‌خواهیم یک فایل خاص فقط یک بار وارد شود.

برای بررسی بیشتر این دو تابع، می‌توانید به مستندات آن‌ها در این صفحه و این صفحه مراجعه کنید.

یک نمونه از کاربردهای دیگر require یا include در PHP استفاده از آن برای احراز هویت در پروژه‌هاست! مثلاً به‌جای اینکه در ابتدا همه‌ی فایل‌ها، یک سشن PHP یا کوکی را بررسی کنید، در فایلی آن‌ها را چک کرده و در ابتدای صفحات مهم فراخوانی می‌کنیم.

این آموزش بخشی از یک آموزش جامع و قدم به قدم در سبز دانش است: دوره رایگان آموزش PHP