PHP include va kodni fayllarga bo'lish
Saytda o’nlab sahifa bo’ladi va har birida bir xil sarlavha, menyu va
pastki qism takrorlanadi. Menyuga bitta havola qo’shish uchun o’nta faylni
tahrirlash — mantiqsiz. include shu muammoni hal qiladi.
Muammo
sayt/
├── index.php ← sarlavha + menyu + mazmun + footer
├── haqida.php ← sarlavha + menyu + mazmun + footer
└── aloqa.php ← sarlavha + menyu + mazmun + footer
Uch faylda bir xil kod. Menyu o’zgarsa — uch joyni tahrirlash kerak.
Yechim: umumiy qismlarni ajratish
sayt/
├── index.php
├── haqida.php
└── qismlar/
├── sarlavha.php ← <head>, menyu
└── footer.php ← pastki qism
index.php:
<?php include "qismlar/sarlavha.php"; ?>
<h1>Bosh sahifa</h1>
<p>Xush kelibsiz!</p>
<?php include "qismlar/footer.php"; ?>
include va require farqi
include |
require |
|
|---|---|---|
| Fayl topilmasa | Ogohlantirish, kod davom etadi | Fatal xato, kod to’xtaydi |
| Qachon | Ixtiyoriy qism (reklama, banner) | Majburiy qism (sozlama, funksiya) |
_once versiyalari
Faraz qiling, funksiyalar.php ichida funksiya e’lon qilingan va u ikki
marta qo’shildi:
require "funksiyalar.php";
require "funksiyalar.php"; // ❌ Fatal error: Cannot redeclare salom()
Funksiya va klass ikki marta e’lon qilinmaydi — PHP darhol to’xtaydi.
Yechim — _once versiyasi:
require_once "funksiyalar.php";
require_once "funksiyalar.php"; // ✅ ikkinchisi e'tiborsiz qoldiriladi
include_once va require_once faylni bir marta qo’shadi. Funksiya yoki
klass e’loni bo’lgan fayllar uchun har doim _once versiyasini ishlating.
O’zgaruvchilar birga ishlaydi
Qo’shilgan fayl chaqiruvchi faylning o’zgaruvchilarini ko’radi:
sozlama.php:
<?php
$sayt_nomi = "LearnCode";
$yil = 2026;
index.php:
<?php
require "sozlama.php";
echo "$sayt_nomi — $yil"; // LearnCode — 2026
Teskarisi ham ishlaydi: include dan oldin e’lon qilingan o’zgaruvchini
qo’shilgan fayl ko’radi. Shablon shu tamoyilga qurilgan.
Shablon naqshi
ob_start() chiqishni buferga yig’adi, ob_get_clean() esa uni matn
sifatida qaytaradi. Bu HTML shablonni funksiya ichida yozish imkonini beradi.
Fayl qaytaradigan qiymat
Sozlama fayllari uchun eng toza usul:
$sozlama = require "sozlama.php";
Global o’zgaruvchi yaratilmaydi — hamma narsa bitta massivda va nomlar to’qnashmaydi.
Yo’l muammosi
Amaliy tuzilma
Kichik loyihaning odatiy ko’rinishi:
loyiha/
├── public/ ← faqat shu papka internetga ochiq
│ ├── index.php
│ └── style.css
├── src/
│ ├── funksiyalar.php
│ └── baza.php
├── qismlar/
│ ├── sarlavha.php
│ └── footer.php
└── sozlama.php
public/index.php:
<?php
$sozlama = require __DIR__ . "/../sozlama.php";
require __DIR__ . "/../src/funksiyalar.php";
$sarlavha = "Bosh sahifa";
require __DIR__ . "/../qismlar/sarlavha.php";
?>
<h1>Xush kelibsiz</h1>
<?php require __DIR__ . "/../qismlar/footer.php"; ?>
Xavfsizlik
Autoload haqida
Katta loyihalarda har klass uchun require yozish charchatadi. Yechim —
autoload: klass birinchi ishlatilganda PHP uni o’zi topib yuklaydi.
spl_autoload_register(function ($klass) {
require __DIR__ . "/src/{$klass}.php";
});
$obyekt = new Talaba(); // src/Talaba.php avtomatik yuklanadi
Amalda buni Composer bajaradi — PHP’ning paket menejeri:
composer require monolog/monolog
require __DIR__ . "/vendor/autoload.php";
Bir qator bilan barcha kutubxona va o’z klasslaringiz yuklanadi.
Amaliy mashq
includevarequireni mavjud bo’lmagan faylda sinang;- sarlavha va footer qismlarini alohida faylga ajrating;
$sarlavhao’zgaruvchisiniincludedan oldin e’lon qilib ishlating;- sozlama faylini
return [...]shaklida yozing; __DIR__bilan yo’lni to’g’rilang;- ruxsat etilgan ro’yxat bilan xavfsiz sahifa tanlash yozing.
6-qadam eng muhim xavfsizlik qoidasini mustahkamlaydi.
Qisqacha xulosa
include/requireboshqa fayl mazmunini shu joyga qo’yadi.requirefayl topilmasa to’xtatadi,include— davom etadi.- Funksiya va klass fayllari uchun
_onceversiyasini ishlating. - Qo’shilgan fayl chaqiruvchining o’zgaruvchilarini ko’radi.
- Sozlama uchun
return [...]+$s = require ...eng toza usul. - Yo’lni har doim
__DIR__bilan yozing. - Foydalanuvchi ma’lumotini hech qachon
includeqilmang — ruxsat etilgan ro’yxat ishlating.
Keyingi darsda xatolar bilan ishlash — try/catch va
xatolarni boshqarish.