O'chirilmagan PHP faylni qanday o'chirish mumkin. PHP da faylni qanday o'chirish mumkin? Nima uchun bu funksiya unlink() deb ataladi

8 yil oldin

Katta faylni o'chirib tashladingiz, lekin bo'sh joy ko'paymagan yoki diskdan foydalanish kamaymaganmi? UNIX yoki boshqa POSIX OS dan foydalanyapsizmi?

Unlink() faylni o'chirish emas, balki fayl nomini o'chirish haqidadir. Manpageda aytilishicha: ``Unlink - nomni va ehtimol u tegishli faylni o'chirish"".

Ko'pincha fayl faqat bitta nomga ega bo'ladi -- uni olib tashlash faylning "tanasini" ham o'chiradi (erkin, o'chiradi) (bir ogohlantirish bilan, pastga qarang). Bu oddiy, odatiy hol.

Biroq, "fayl bir xil yoki turli kataloglarda bir nechta nomga ega bo'lishi (link() funktsiyasiga qarang). Barcha nomlar fayl tanasiga ishora qiladi va "uni tirik saqlaydi". Faqatgina barcha nomlar o'chirilgandan so'ng, fayl tanasi aslida bo'shatiladi.

Ogohlantirish:
Faylni ochiq ushlab turgan jarayon orqali fayl tanasi ham * "jonli saqlanishi" (hali ham disk maydonidan foydalanish) mumkin. Jarayon uni ochiq ushlab tursa, tana ajratilmaydi (diskda bo'sh joy bo'shmaydi). Haqiqatan ham, xato tufayli o'chirilgan, ammo jarayon tufayli ochiq bo'lgan faylni qayta tiklashning ajoyib usuli bor ...

10 yil oldin

Men asosiy matn faylini o'zgartirishdan oldin zaxira fayl yaratilgan kichik sinov ustida ishlayapman. Keyin xatolik yuz berganda, asosiy fayl o'chiriladi (uziladi) va uning o'rniga zaxira fayl qaytariladi.

Shunga qaramay, men bir soatcha boshimni sindirib yuribman, nima uchun asosiy faylni uzish uchun ruxsatnomalarimni ololmadim.

Nihoyat, nima noto'g'ri ekanligini bilib oldim: men fayl ustida ishlayotganim va faylni hali yopmaganim uchun u hali ham ishlatilmoqda va, albatta, o'chirilmaydi :)

Boshqalar ham xuddi shunday xatoga yo'l qo'ymaslik uchun men buni shu erda eslatib o'tishni o'yladim:

// Avval faylni yoping
fclose($fp);

// Keyin aloqani uzing :)
ajratish ($ somefile);
?>

14 yil oldin

Muayyan kengaytmaning barcha fayllarini o'chirish yoki barchasini joker belgilar bilan o'chirish uchun glob funktsiyasidan foydalanish juda oddiy. Aytaylik, men barcha jpg fayllarni o'chirib tashlamoqchi edim.......

Foreach (glob ("*.jpg" ) $filename sifatida) (
echo " $filename size " . fayl hajmi ($filename) . "\n" ;
ajratish ($filename);
}

?>

10 yil oldin

Ruxsatlar rad etilishi bilan bog'liq muammoga duch kelgan har bir kishi uchun xatolik ba'zan ishchi katalogingiz ierarxiyasidan yuqoriroq papkada joylashgan faylni o'chirishga harakat qilganingizda (ya'ni, boshlanadigan yo'lni o'chirishga urinayotganda) yuzaga keladi. "../" bilan).

Shunday qilib, ushbu muammoni hal qilish uchun siz chdir() dan foydalanib, ishchi katalogni ajratmoqchi bo'lgan fayl joylashgan papkaga o'zgartirishingiz mumkin.

$old = getcwd(); // Joriy katalogni saqlang
chdir ($faylga_yo'l);
ajratish ($filename);
chdir ($eski); // Eski ishchi katalogni tiklang
?>

4 yil oldin

OSX da "Ruxsat rad etildi" xatosiga qarshi kurashayotganda katalogda PHP-foydalanuvchisi uchun WRITE ruxsatlari borligiga ishonch hosil qiling.

Bundan tashqari, agar siz ACL-larga tayansangiz va fayl yoki symlinkni o'chirmoqchi bo'lsangiz, ichidagi narsalarni uzish uchun o'z ichiga olgan katalog "delete_child" ruxsatiga ega bo'lishi kerak. Agar siz konteyner jildini o'zi o'chirishga imkon beradigan papkaga faqat "o'chirish" ni bersangiz, lekin ichidagi ob'ektlarni emas.

4 yil oldin

Bu ochiq-oydin tuyulishi mumkin, lekin men bu muammo tufayli sochimni yirtib tashladim - siz o'chirmoqchi bo'lgan fayl hozirda ishlatilmayotganiga ishonch hosil qiling. Menda matnli faylni tahlil qiladigan skript bor edi va uni tugatgandan so'ng o'chirib tashlashim kerak edi, lekin ruxsatnomani rad etish xatosini olishda davom etdim, chunki men faylni aniq yopmaganman, shuning uchun u tahlil qilingan bo'lsa ham, texnik jihatdan "ishlatilgan" edi. to'liq.

11 yil oldin

Yuqoridagi Ggarciaa postida bitta kichik xatolik bor, $DeleteMe noto'g'ri bo'lsa ham closedir dan foydalanish kerak.











}

Closedir($dh);
agar ($DeleteMe )(
@rmdir($dir);
}
}

?>

9 oy oldin

"Resurs mavjud emas" xatosini unlink() funksiyasi bilan ishlash, try catch yordamida istisno sifatida

Hatto is_file() yoki file_exists() fayl mavjudligi yoki yo'qligini tekshiradi, faylni ba'zi ilovalar tomonidan foydalanilayotganligi ehtimoli bor, bu o'chirishni oldini oladi va unlink() "Resurs mavjud emas" xatosini ko'rsatadi.

Shunday qilib, `is_resource()`, `is_writable()`, `stream_get_meta_data()`...va hokazo kabi koʻplab usullarni sinab koʻrganimdan soʻng, * faylni *"oʻchirish"* paytida xatoni hal qilishning yagona eng yaxshi usuliga erishdim. *mavjud emas** yoki **mavjud, lekin ba'zi ilovalar tomonidan foydalanilmoqda**

o'chirish_fayl funksiyasi($pFilename)
{
agar (fayl_mavjud($pFilename)) (
// Muhammad.begawala tomonidan qo'shilgan
// "@" "Resurs mavjud emas" xatosini ko'rsatishni to'xtatadi, chunki fayl ba'zi joylarda ochiq.
// "unlink($pFilename) !== true" fayl muvaffaqiyatli o'chirilganligini tekshiradi.
// Foydalanuvchilarga ko'rsatish o'rniga xatoliklarni osonlik bilan hal qilishimiz uchun istisnolarni tashlash.
if(@unlink($pFilename) !== rost)
throw new Exception("Faylni o'chirib bo'lmadi: " . $pFilename . " Iltimos, undan foydalanayotgan barcha ilovalarni yoping.");
}
haqiqatni qaytarish;
}

/* === FOYDALANISH === */

harakat qilib ko'ring (
if(delete_file("hello_world.xlsx") === rost)
echo "Fayl o'chirildi";
}
tutish ($e istisno) (
echo $e->getMessage(); // yuqorida belgilangan istisno xabarini chop etadi.
}

11 yil oldin

Yuqoridagi Ggarciaa postida bitta kichik xatolik bor, u noto'g'ri deb baholangan fayl va katalog qatorlarini e'tiborsiz qoldiradi (ya'ni, "0")

Ruxsat etilgan kod quyida (false!==)

// ggarciaa da gmail dot com (04-iyul-2007 01:57)
// Men katalogni bo'shatishim kerak edi, lekin uni saqlab qoldim
// shuning uchun men hissani biroz o'zgartirdim
// stefano at takys dot it (28-dekabr 2005 11:57)
// Qisqa, ammo kuchli rekursiv funksiya
// agar dirslarda yashirin fayllar bo'lsa ham ishlaydi
// $dir = maqsadli katalog
// $DeleteMe = agar rost bo'lsa, $dir ham o'chiriladi, agar noto'g'ri bo'lsa, uni tinch qo'ying

SureRemoveDir funktsiyasi ($dir, $DeleteMe) (
if(! $dh = @ opendir ($dir )) qaytish;
while (false !== ($obj = readdir ($dh ))) (
if($obj == "." || $obj == ".." ) davom ettirish;
agar (!@ unlink ($dir . "/" . $obj )) SureRemoveDir ($dir . "/" . $obj , rost );
}
agar ($DeleteMe )(
closedir($dh);
@rmdir($dir);
}
}

//SureRemoveDir("EmptyMe", noto'g'ri);
//SureRemoveDir("RemoveMe", rost);

?>

8 yil oldin

Faylda ODBC buyruqlaridan foydalangandan so'ng (Windows-da) uzilish muvaffaqiyatsiz bo'lishi mumkin.

Yo'qnahiyla qildi.

Faqatfaylni keyin o'chirib tashlashi uchun chiqardi ...

Biz mavzuga bag'ishlangan darsni davom ettiramiz " PHP fayllari bilan ishlash" Agar avvalgisini o'qimagan bo'lsangiz, men uni o'qishni tavsiya qilaman va o'qiganlar uchun davom etaylik. Ushbu darsda siz PHP yordamida yaratilgan yoki mavjud faylni o'chirish, faylni nusxalash yoki nomini o'zgartirish, blokirovka qilishni o'rganasiz.
Xo'sh, agar tayyor bo'lsangiz, jangga boring ...

PHP da faylni o'chirish

Agar biron bir faylni o'chirish kerak bo'lsa, PHP unlink() funksiyasidan foydalaning:

Aloqani uzish (fayl nomi);

Fayl nomi - bu erda o'chirmoqchi bo'lgan fayl nomini kiriting.

Aytaylik, "file.txt" faylini o'chirishimiz kerak, to'ldirish uchun misol quyidagicha bo'ladi:

Aloqani uzish("file.txt");

Tayyor kod:

Agar "file.txt" fayli mavjud bo'lsa, skript uni o'chirib tashladi.

PHP da faylni nusxalash

Agar kontentni bitta fayldan boshqa faylga nusxalash kerak bo'lsa, PHP copy() funksiyasidan foydalaning.

Nusxalash ("fayl1", "fayl2");

File1 - matn nusxalanadigan fayl nomi
- fayl2 – matn nusxalanadigan fayl nomi

Masalan, mahalliy serveringizda “test-1” jildida “file2.txt” nomli fayl yarating. Fayl bo'sh bo'lsin. Endi ushbu kodni joylashtiramiz copy("file.txt", "file2.txt"); php da "file.php" kodi:

Biz nima qildik? PHP orqali “file.txt” nomli fayl yaratildi, PHP orqali “file.txt” fayliga yozuv kiritildi. Sizni blog saytida ko'rganimdan xursandman ", natijani brauzerda ko'rsatdi, matnni "file.txt" faylidan ko'chirdi va uni "file2.txt" fayliga joylashtirdi. Bu sodir bo'lganiga ishonmaysizmi? Esingizdami, “file2.txt” fayli bo‘sh edi?! Oching! Va nimani ko'ryapsiz? Ha, to'g'ri, "file.txt" faylidagi matn:

PHP da fayl nomini o'zgartirish

Fayl nomini oʻzgartirish uchun PHP rename() funksiyasidan foydalaning:

Nomini o'zgartirish ("fayl1", "fayl2");

File1 - almashtirilishi kerak bo'lgan fayl nomi ( qayta nomlash)
- file2 - bu erda siz yangi fayl nomini berishingiz kerak

To'ldirish uchun bir misol:

Nomini o'zgartirish ("fayl2..txt");

Mana tugallangan kod:

“file2.txt” fayli “site.txt” fayliga o‘zgartirildi.

Menimcha, bu erda darsimizni yakunlashimiz kerak. Lekin bu hammasi emas, keyingi darsda biz fayllar bilan ishlashni davom ettiramiz.

Oldingi maqolada biz bu haqda gaplashdik va u erda men sizni tanishtirdim rmdir() funktsiyasi, bu katalogni o'chiradi. Biroq, men bu yo'l bilan faqat bo'sh katalogni o'chirishingiz mumkinligini aytdim, lekin fayllar bilan katalogni qanday o'chirish mumkin, Siz hozir bilib olasiz.

Printsip juda oddiy: to fayllar bilan katalogni o'chirish, birinchi navbatda barcha fayllarni, shuningdek, barcha pastki kataloglarni o'chirishingiz kerak. Kichik kataloglar ichida fayllar va boshqa pastki kataloglar ham bo'lishi mumkin, ular ham tozalanishi kerak. Umuman olganda, qiyinchilik shundaki, kataloglarning chuqurligi juda katta bo'lishi mumkin. Va ko'rinib turibdiki, rekursiya o'zini o'zi taklif qiladi - o'z ichidagi funktsiyani chaqirish.

Algoritmning aniq murakkabligiga qaramay, amalga oshirish juda oddiy va shaffof:

RemoveDirectory funksiyasi($dir) (
agar ($objs = glob($dir."/*")) (
foreach($objs sifatida $obj) (
is_dir($obj) ? removeDirectory($obj): ajratish ($obj);
}
}
rmdir($dir);
}
?>

Men ushbu funktsiyaning algoritmini tushunarli tilda tushuntirishga harakat qilaman. Avvalo, biz berilgan katalog ichidagi barcha fayllar ro'yxatini olamiz. Agar ular yo'q bo'lsa, darhol uni o'chirib tashlang. Agar ular mavjud bo'lsa, biz ularni birma-bir saralashni boshlaymiz. Agar element fayl bo'lsa, uni o'chirib tashlang ( ajratish ($obj)). Agar bu katalog bo'lsa, biz ushbu katalogdan o'tib, yana o'z funktsiyamizni chaqiramiz. Bu rekursiya: funktsiya o'zini chaqiradi. Funktsiya o'zini chaqirgandan so'ng, hamma narsa yana boshlanadi, lekin boshqa katalog bilan. Uning barcha fayllari ham o'chiriladi va uning barcha kataloglari ushbu funktsiyaga qaytariladi. Barcha kataloglar va fayllar o'chirilganda, allaqachon bo'sh katalog o'chiriladi.

Sizga shuni aytaman, bu algoritm amaliy nuqtai nazardan unchalik foydali emas (bu ko'pincha kerak emas) PHP-dagi fayllar bilan kataloglarni o'chirish), tafakkuringizni rivojlantirish uchun qanchalik foydali. Bu juda oddiy algoritm bo'lib, u juda va juda murakkab masalani hal qiladi. Shuning uchun, algoritmlarni tuzishni o'rganing - bu har qanday dasturlash tilida eng muhim narsa.

PHP asosan dinamik veb-sahifalarni yaratish uchun foydalaniladigan dasturlash tilidir. Boshqa har qanday dasturlash tillari singari, PHP ham juda ko'p funktsiyalarni o'z ichiga oladi, shu jumladan juda ko'p foydali. Masalan, skriptlaringizda foydalanishingiz mumkin bo'lgan faylni o'chirish imkoniyati.

Ushbu maslahat sizga qanday qilib o'rganishga yordam beradi PHP da faylni o'chirish funksiyasidan foydalanish uzish.

Bosqichma-bosqich ko'rsatma:

PHP da faylni o'chirish uchun funksiyadan foydalanishingiz mumkin uzish. Misol sifatida oddiy skriptdan foydalanib, uning qanday ishlashini ko'rib chiqaylik uzish:

  1. Matn muharririda matnli fayl yarating (vi/vim, nano, gedit yoki oddiy bloknot).
  2. Unga quyidagi kodni kiriting yoki oddiygina nusxa ko'chiring:$file="example.log";
    ajratish ($ fayl);
    ?>
  3. Saqlash (masalan, testunlink.php nomi ostida) va yaratilgan skript faylini test veb-serveringizga joylashtiring. Xuddi shu katalogda istalgan tarkibga ega example.log faylini yarating. Bu biz yo'q qiladigan narsa.
  4. Skriptni brauzeringizda chaqirish orqali ishga tushiring va katalogga yana qaraganingizda, example.log fayli endi yo'qligini topasiz. Aloqani uzish hiyla qildi!

Hammasi qanday ishlaydi:

Skript kodining birinchi qatori: biz skriptimiz turini aniqlaymiz.

Kodning ikkinchi qatori: Biz yaratgan skriptni ishga tushirgandan so'ng, fayl o'zgaruvchisiga qiymat beriladi example.log(esda tutingki, bir xil nomdagi fayl biz yaratgan skript bilan bir katalogda bo'lishi kerak. Uni istalgan kontent bilan yarating!).

Kodning uchinchi qatori: example.log faylini ajratish funksiyasiga argument sifatida o'tkazish orqali o'chiring.

Skript kodining to'rtinchi qatori: PHP kodining oxiri.