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
Ikki asosiy funksiya:
file_put_contents($fayl, $matn)— yozadi (mavjud mazmunni o’chiradi);FILE_APPENDbayrog’i bilan — oxiriga qo’shadi;file_get_contents($fayl)— butun faylni matn sifatida o’qiydi.
Avval tekshiring
Mavjud bo’lmagan faylni to’g’ridan-to’g’ri o’qish ogohlantirish beradi —
har doim file_exists bilan tekshiring.
Qatorlab o’qish
file() faylni massiv qilib qaytaradi — har element bitta qator.
Ikki bayroq qator uzilishi va bo’sh qatorlarni tozalaydi.
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:
JSON_UNESCAPED_UNICODE — o’zbek harflari o’qiladigan qolsin;
JSON_PRETTY_PRINT — chiroyli chekinish bilan.
CSV bilan ishlash
fputcsv/fgetcsv vergul va tirnoqlarni o’zi hisobga oladi — qo’lda
explode(",") qilishdan ishonchliroq.
Bir vaqtda yozish muammosi
Papka bilan ishlash
glob naqsh bo’yicha fayllarni topadi; basename yo’ldan faqat fayl
nomini oladi.
Nusxalash, ko’chirish, o’chirish
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
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
- Faylga matn yozing va qayta o’qing;
FILE_APPENDbilan yana bir qator qo’shing;file_existstekshiruvi bilan xavfsiz o’qish funksiyasini yozing;- massivni JSON qilib saqlang va qayta yuklang;
- CSV yozib,
fgetcsvbilan o’qing; globbilan papkadagi.txtfayllarni sanang.
Qisqacha xulosa
file_put_contentsyozadi,FILE_APPENDbilan qo’shadi;file_get_contentso’qiydi.- O’qishdan oldin
file_existsbilan tekshiring. file()faylni qatorlar massiviga aylantiradi.- Katta fayl uchun
fopen+fgets— xotira tejaladi. wrejimi faylni bo’shatadi; bir vaqtda yozishdaLOCK_EX.- JSON uchun
JSON_UNESCAPED_UNICODE, CSV uchunfputcsv/fgetcsv. - Fayl yuklashda: yangi nom,
mime_content_type, hajm chegarasi,move_uploaded_file.
Keyingi darsda ma’lumotlar bazasi va PDO — MySQL bilan ishlash.