PHP fayllar bilan ishlash (o'qish va yozish)

Sozlamalar, jurnal yozuvlari, foydalanuvchi yuklagan rasm, hisobot eksporti — bularning barchasi fayl bilan ishlashni talab qiladi.

Yozish va o’qish

PHP

Ikki asosiy funksiya:

  • file_put_contents($fayl, $matn) — yozadi (mavjud mazmunni o’chiradi);
  • FILE_APPEND bayrog’i bilan — oxiriga qo’shadi;
  • file_get_contents($fayl) — butun faylni matn sifatida o’qiydi.

Avval tekshiring

PHP

Mavjud bo’lmagan faylni to’g’ridan-to’g’ri o’qish ogohlantirish beradi — har doim file_exists bilan tekshiring.

Qatorlab o’qish

PHP

file() faylni massiv qilib qaytaradi — har element bitta qator. Ikki bayroq qator uzilishi va bo’sh qatorlarni tozalaydi.

PHP

Ochish rejimlari

Rejim Ma’nosi
r O’qish
w Yozish — mazmunni o’chiradi
a Qo’shish — oxiriga yozadi
x Yaratish — fayl bor bo’lsa xato
r+, w+, a+ O’qish va yozish

JSON saqlash

Tuzilgan ma’lumot uchun eng qulay usul:

PHP

JSON_UNESCAPED_UNICODE — o’zbek harflari o’qiladigan qolsin; JSON_PRETTY_PRINT — chiroyli chekinish bilan.

CSV bilan ishlash

PHP

fputcsv/fgetcsv vergul va tirnoqlarni o’zi hisobga oladi — qo’lda explode(",") qilishdan ishonchliroq.

Bir vaqtda yozish muammosi

PHP

Papka bilan ishlash

PHP

glob naqsh bo’yicha fayllarni topadi; basename yo’ldan faqat fayl nomini oladi.

Nusxalash, ko’chirish, o’chirish

PHP

Fayl yuklash

HTML tomonida enctype majburiy:

<form method="post" enctype="multipart/form-data">
  <input type="file" name="rasm">
  <button type="submit">Yuklash</button>
</form>

PHP tomonida:

<?php
const MAX = 2 * 1024 * 1024;                    // 2 MB
const RUXSAT = ["image/jpeg", "image/png", "image/webp"];

if ($_SERVER["REQUEST_METHOD"] === "POST" && isset($_FILES["rasm"])) {
    $f = $_FILES["rasm"];

    // 1. Xatoni tekshirish
    if ($f["error"] !== UPLOAD_ERR_OK) {
        exit("Yuklashda xato: " . $f["error"]);
    }

    // 2. Hajm
    if ($f["size"] > MAX) {
        exit("Fayl 2 MB dan katta");
    }

    // 3. HAQIQIY turni tekshirish (nomga ISHONMANG)
    $tur = mime_content_type($f["tmp_name"]);
    if (!in_array($tur, RUXSAT, true)) {
        exit("Faqat rasm yuklash mumkin");
    }

    // 4. Yangi, xavfsiz nom yasash
    $kengaytma = match($tur) {
        "image/jpeg" => "jpg",
        "image/png"  => "png",
        "image/webp" => "webp",
    };
    $nom = bin2hex(random_bytes(16)) . "." . $kengaytma;

    // 5. Ko'chirish
    if (move_uploaded_file($f["tmp_name"], __DIR__ . "/yuklanmalar/" . $nom)) {
        echo "Yuklandi: $nom";
    }
}

Yo’l xavfsizligi

PHP

basename() yo’ldagi papka qismini olib tashlaydi — path traversal hujumidan asosiy himoya. Foydalanuvchi bergan nomni hech qachon to’g’ridan-to’g’ri yo’lga qo’shmang.

Amaliy mashq

  1. Faylga matn yozing va qayta o’qing;
  2. FILE_APPEND bilan yana bir qator qo’shing;
  3. file_exists tekshiruvi bilan xavfsiz o’qish funksiyasini yozing;
  4. massivni JSON qilib saqlang va qayta yuklang;
  5. CSV yozib, fgetcsv bilan o’qing;
  6. glob bilan papkadagi .txt fayllarni sanang.

Qisqacha xulosa

  • file_put_contents yozadi, FILE_APPEND bilan qo’shadi; file_get_contents o’qiydi.
  • O’qishdan oldin file_exists bilan tekshiring.
  • file() faylni qatorlar massiviga aylantiradi.
  • Katta fayl uchun fopen + fgets — xotira tejaladi.
  • w rejimi faylni bo’shatadi; bir vaqtda yozishda LOCK_EX.
  • JSON uchun JSON_UNESCAPED_UNICODE, CSV uchun fputcsv/fgetcsv.
  • Fayl yuklashda: yangi nom, mime_content_type, hajm chegarasi, move_uploaded_file.

Keyingi darsda ma’lumotlar bazasi va PDO — MySQL bilan ishlash.

Bu dars foydali bo'ldimi?

marta ko'rildi