افزودن فایل (PHP Include)
Include و Require: مهندسیِ قطعاتِ کد 🧩🏗️
در پروژههایِ بزرگ، نوشتنِ همهیِ کدها در یک فایل فاجعهبار است. ما کدهایی که تکرار میشوند (مثل منویِ سایت یا هدر) را در فایلهایِ جداگانه مینویسیم و هر جا نیاز بود، آنها را فراخوانی میکنیم.
تفاوتِ حیاتیِ Include و Require
- Include: اگر فایل پیدا نشود، یک Warning (اخطار) میدهد اما اجرایِ بقیهیِ کدهایِ صفحه ادامه مییابد.
- Require: اگر فایل پیدا نشود، یک Fatal Error (خطایِ مهلک) میدهد و اجرایِ کلِ برنامه در همان لحظه متوقف میشود.
نسخههایِ _once:
دستوراتِ include_once و require_once چک میکنند که اگر فایل قبلاً در جایِ دیگری فراخوانی شده، دیگر دوباره آن را لود نکنند. این کار از مشکلِ خطرناکِ "تعریفِ مجددِ توابع" جلوگیری میکند.
استفاده برای مدیریت صفحات:
{code_block('include "header.php";\necho "محتوای اصلی سایت";\ninclude "footer.php";')}__DIR__ استفاده کنید تا در لایههایِ مختلفِ پوشهها دچار مشکل نشوید.
بخش تخصصی: مهندسی پیشرفته و امنیت در PHP 🐘⚙️
درکِ عمیقِ مفاهیمِ پیشرفته، تفاوتِ بینِ یک کدنویسِ معمولی و یک معمارِ نرمافزار را رقم میزند.
۱. بهینهسازی I/O و بافرینگ
در هنگامِ کار با فایلهایِ حجیم، هرگز کلِ فایل را به یکباره در حافظه (RAM) بارگذاری نکنید. استفاده از Streams و توابعِ fopen/fgets به شما اجازه میدهد فایل را خط به خط پردازش کنید که باعث میشود مصرفِ حافظه همیشه در کمترین سطحِ ممکن باقی بماند.
۲. امنیتِ نشستها (Session Security)
مهمترین خطر در مدیریتِ کاربران، Session Hijacking است. همیشه بعد از لاگین کردنِ کاربر، از session_regenerate_id(true) استفاده کنید تا شناسهیِ نشستِ قبلی باطل شود. همچنین فلگهایِ HttpOnly و Secure را برای کوکیها فعال کنید.
۳. استانداردهایِ مدرن و Autoloading
در پروژههایِ بزرگ، استفاده از include دستی فاجعهبار است. استانداردِ PSR-4 و استفاده از Composer به شما اجازه میدهد کلاسها را فقط در زمانی که واقعاً نیاز هستند بارگذاری کنید (Lazy Loading)، که سرعتِ لود شدنِ کلِ اپلیکیشن را به شدت بالا میبرد.
DateTime و PDO از این پارادایم استفاده میکنند.
تمرینهای عملی
برای تثبیت یادگیری این درس تمرینهای زیر را حل کنید
فایلی به نام "config.php" را به صورتی فراخوانی کنید که اگر وجود نداشت، اجرایِ برنامه متوقف شود.
<?php
require "config.php";
?>
آماده رفتن به درس بعدی هستید؟
این درس را به پایان رساندید و میتوانید به درس بعدی بروید.