نحوه حذف فایل php که پاک نشده است. چگونه یک فایل را در PHP حذف کنیم؟ چرا این تابع unlink () نامیده می شود
8 سال پیش
فایل بزرگی را حذف کردید اما افزایش فضای خالی یا کاهش استفاده از دیسک را مشاهده نکردید؟ از یونیکس یا سایر سیستم عامل های POSIX استفاده می کنید؟
unlink() در مورد حذف فایل نیست، بلکه در مورد حذف نام فایل است. صفحه man می گوید: `` unlink - حذف یک نام و احتمالاً فایلی که به آن اشاره دارد.
اغلب اوقات یک فایل فقط یک نام دارد -- با حذف آن، "بدنه" فایل نیز حذف می شود (با یک اخطار، به زیر مراجعه کنید). این حالت ساده و معمولی است.
با این حال، "کاملاً خوب است که یک فایل چندین نام داشته باشد (به تابع پیوند())، در دایرکتوری های مشابه یا متفاوتی مراجعه کنید. تنها زمانی که همه نام ها حذف شوند، بدنه فایل در واقع آزاد می شود.
اخطار:
بدن یک فایل ممکن است *همچنین* توسط فرآیندی که فایل را باز نگه می دارد، "زنده نگه داشته شود" (هنوز از فضای دیسک استفاده می کند). تا زمانی که فرآیند آن را باز نگه می دارد، بدنه به هیچ وجه اختصاص داده نمی شود (فضای دیسک را آزاد نمی کند). در واقع، یک راه فانتزی برای احیای مجدد فایلی وجود دارد که با اشتباهی حذف شده است اما همچنان با یک فرآیند باز نگه داشته می شود...
10 سال پیش
من روی چند آزمایش کوچک کار میکردم که در آن یک فایل پشتیبان قبل از تغییر فایل متنی اصلی ایجاد شد. سپس هنگامی که یک خطا پرتاب می شود، فایل اصلی حذف می شود (لغو پیوند) و فایل پشتیبان به جای آن برگردانده می شود.
با این حال، من حدود یک ساعت است که در مورد اینکه چرا نمی توانم مجوزهای خود را برای لغو پیوند فایل اصلی به درستی دریافت کنم، سرم را شکستم.
بالاخره فهمیدم مشکل چیست: چون روی فایل کار میکردم و هنوز فایل را نبسته بودم، هنوز در حال استفاده بود و البته نمیتوان آن را حذف کرد:)
بنابراین به این فکر کردم که در اینجا به این نکته اشاره کنم تا از انجام اشتباه مشابه توسط دیگران جلوگیری کنم:
// ابتدا فایل را ببندید
fclose($fp);
// سپس لینک را لغو کنید :)
لغو پیوند ($somefile)؛
?>
14 سال پیش
برای حذف تمام فایل های یک پسوند خاص، یا در واقع، حذف همه با حروف عام، یک راه بسیار ساده استفاده از تابع glob است. بگو میخواستم همه jpg ها رو پاک کنم.........
Foreach (glob ("*.jpg" ) به عنوان $filename ) (
echo "$filename size". اندازه فایل ($filename). "\n" ;
لغو پیوند ($filename)؛
}
?>
10 سال پیش
برای هرکسی که با خطای رد مجوزها مشکل دارد، گاهی اوقات زمانی ایجاد میشود که میخواهید فایلی را که در پوشهای بالاتر در سلسله مراتب قرار دارد را در فهرست کاری خود حذف کنید (یعنی هنگام تلاش برای حذف مسیری که شروع میشود. با "../").
بنابراین برای حل این مشکل، میتوانید از chdir() برای تغییر دایرکتوری کاری به پوشهای که فایلی که میخواهید پیوند آن را لغو کنید، استفاده کنید.
$old = getcwd(); // دایرکتوری فعلی را ذخیره کنید
chdir($path_to_file);
لغو پیوند ($filename)؛
chdir ($old)؛ // پوشه کاری قدیمی را بازیابی کنید
?>
4 سال پیش
در OSX، هنگام مبارزه با خطای "Permission Denied"، مطمئن شوید که دایرکتوری دارای مجوز WRITE برای کاربر php در حال اجرا است.
بعلاوه، اگر به ACL ها تکیه می کنید و می خواهید یک فایل یا پیوند نمادین را حذف کنید، دایرکتوری حاوی مجوز "delete_child" برای لغو پیوند چیزهای داخل باید داشته باشد. اگر فقط "حذف" را به پوشه اعطا کنید که به شما امکان می دهد خود پوشه کانتینر را حذف کنید، اما نه اشیاء داخل.
4 سال پیش
این ممکن است بدیهی به نظر برسد، اما من با این مشکل موهایم را پاره کردم - مطمئن شوید فایلی که میخواهید حذف کنید در حال حاضر استفاده نمیشود. من یک اسکریپت داشتم که در حال تجزیه یک فایل متنی بود و قرار بود پس از تکمیل آن را حذف کنم، اما به دلیل اینکه فایل را به صراحت نبسته بودم، مدام خطای رد مجوز دریافت میکردم، بنابراین از نظر فنی هنوز در حال «استفاده» بود، حتی اگر تجزیه انجام شد. کامل.
11 سال پیش
پست Ggarciaa در بالا قبلاً یک خطای کوچک دارد، closeir باید استفاده شود حتی اگر $DeleteMe نادرست باشد
}
Closedir($dh)؛
اگر ($DeleteMe )(
@rmdir($dir);
}
}
?>
9 ماه قبل
مدیریت خطای "منبع در دسترس نیست" با unlink() به عنوان استثنا با استفاده از try catch
حتی is_file() یا file_exists() وجود یا عدم وجود فایل را بررسی می کند، این احتمال وجود دارد که فایل توسط برخی از برنامه ها استفاده شود که از حذف جلوگیری می کند و unlink() خطای "Resource Unavailable" را نشان می دهد.
بنابراین پس از آزمایش روشهای بسیاری مانند: «is_resource()»، «is_writable()»، «stream_get_meta_data()»... و غیره، به تنها بهترین راه برای رسیدگی به خطا در حین *"حذف"* یک فایل رسیدم که یا * *وجود ندارد** یا **وجود دارد اما توسط برخی از برنامه ها استفاده می شود**
تابع delete_file ($pFilename)
{
if (file_exists ($pFilename)) (
// اضافه شده توسط muhammad.begawala
// "@" نمایش خطای "منبع در دسترس نیست" را متوقف می کند زیرا فایل در جایی باز است.
// "unlink($pFilename) !== true" بررسی خواهد کرد که آیا فایل با موفقیت حذف شده است.
// پرتاب استثنا تا بتوانیم به جای نمایش به کاربران، خطا را به راحتی مدیریت کنیم.
if(@unlink($pFilename) !== درست است)
throw new Exception("Could not delete file: " . $pFilename . " لطفاً همه برنامه هایی را که از آن استفاده می کنند ببندید.");
}
بازگشت درست؛
}
/* === استفاده === */
تلاش كردن (
if(delete_file("hello_world.xlsx") === درست است)
echo "فایل حذف شد"؛
}
گرفتن (استثنا $e) (
echo $e->getMessage(); // پیام استثنا تعریف شده در بالا را چاپ می کند.
}
11 سال پیش
پست Ggarciaa در بالا دارای یک خطای کوچک است، رشته های فایل و دایرکتوری که به عنوان نادرست ارزیابی می شوند را نادیده می گیرد (یعنی "0")
کد ثابت در زیر است (نادرست!==)
// ggarciaa در gmail dot com (04-ژوئیه-2007 01:57)
// باید یک دایرکتوری را خالی کنم، اما آن را نگه داشتم
// بنابراین من سهم از را کمی تغییر دادم
// stefano attakys dot it (28-دسامبر-2005 11:57)
// یک تابع بازگشتی کوتاه اما قدرتمند
// که همچنین در صورتی کار می کند که dir ها حاوی فایل های مخفی باشند
// $dir = دایرکتوری هدف
// $DeleteMe = اگر درست است، $dir را نیز حذف کنید، اگر نادرست است آن را به حال خود رها کنید
تابع SureRemoveDir ($dir، $DeleteMe) (
if(! $dh = @ opendir ($dir )) return;
while (نادرست !== ($obj = readdir ($dh ))) (
if($obj == "." || $obj == ".." ) continue;
if (!@ unlink ($dir . "/" . $obj )) SureRemoveDir ($dir . "/" . $obj , true );
}
اگر ($DeleteMe )(
closeir($dh)؛
@rmdir($dir);
}
}
//SureRemoveDir("EmptyMe"، false);
//SureRemoveDir("RemoveMe"، true);
?>
8 سال پیش
پس از استفاده از دستورات ODBC روی فایل (در ویندوز) ممکن است لغو پیوند ناموفق باشد.
هیچ کدامنهترفند را انجام داد
فقطفایل را به گونه ای منتشر کرد که بعد از آن حذف شود ...
ما درس را ادامه می دهیم که به موضوع " کار با فایل های پی اچ پی" اگر قسمت قبلی را نخوانده اید، خواندن آن را توصیه می کنم و برای کسانی که آن را خوانده اند، ادامه بدهیم. در این درس یاد خواهید گرفت که چگونه یک فایل ایجاد شده یا موجود را با استفاده از PHP حذف کنید، یک فایل را کپی یا تغییر نام دهید، قفل کنید.
خوب، اگر آماده ای، پس برو به جنگ...
حذف فایل در PHP
اگر نیاز به حذف هر فایلی دارید، از تابع unlink() PHP استفاده کنید:
لغو پیوند (نام فایل)؛
نام فایل – در اینجا نام فایلی را که می خواهید حذف کنید وارد کنید.
فرض کنید باید فایل "file.txt" را حذف کنیم، یک مثال برای پر کردن به این صورت است:
Unlink ("file.txt");
کد آماده: