نحوه حذف فایل 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");

کد آماده:

اگر فایل "file.txt" وجود داشت، اسکریپت آن را حذف کرد.

کپی کردن فایل در PHP

اگر نیاز به کپی محتوا از یک فایل به فایل دیگر دارید، از تابع copy() PHP استفاده کنید.

کپی ("file1"، "file2");

File1 - نام فایل که متن از آنجا کپی می شود
- file2 - نام فایلی که متن در آن کپی می شود

به عنوان مثال، یک فایل به نام "file2.txt" در سرور محلی خود در پوشه "test-1" ایجاد کنید. اجازه دهید فایل خالی باشد. حالا بیایید این کد را Paste کنیم copy("file.txt"، "file2.txt");در php کد "file.php":

ما چه کرده ایم؟ یک فایل به نام "file.txt" از طریق PHP ایجاد کرد، یک ورودی در فایل "file.txt" از طریق PHP ایجاد کرد. از دیدن شما در سایت وبلاگ خوشحالم "، نتیجه را در مرورگر نمایش داد، متن را از فایل "file.txt" کپی کرد و در فایل "file2.txt" قرار داد. باور نمی کنید این اتفاق افتاده است؟ یادتان هست فایل “file2.txt” خالی بود؟! بازش کن و چه می بینید؟ بله، درست است، متنی که در فایل “file.txt” بود:

تغییر نام فایل در PHP

برای تغییر نام یک فایل، از تابع rename() PHP استفاده کنید:

تغییر نام ("file1"، "file2");

File1 – نام فایلی که باید جایگزین شود ( تغییر نام دهید)
- file2 - در اینجا باید یک نام فایل جدید بدهید

در اینجا یک مثال برای پر کردن آورده شده است:

تغییر نام ("file2..txt");

این کد تمام شده است:

فایل “file2.txt” به فایل “site.txt” تغییر نام داده است.

اینجاست که فکر می کنم باید درسمان را تمام کنیم. اما این همه ماجرا نیست، در درس بعدی کار با فایل ها را ادامه خواهیم داد.

در مقاله قبلی در مورد آن صحبت کردیم و در آنجا شما را با آن آشنا کردم تابع rmdir()، که دایرکتوری را حذف می کند. با این حال، من گفتم که به این ترتیب شما فقط می توانید یک پوشه خالی را حذف کنید، اما چگونه یک دایرکتوری با فایل ها را حذف کنیم، اکنون متوجه خواهید شد.

اصل بسیار ساده است: به حذف دایرکتوری با فایل ها، ابتدا باید تمام فایل ها و همچنین زیر شاخه ها را حذف کنید. همچنین ممکن است فایل ها و زیرشاخه های دیگری در زیر شاخه ها وجود داشته باشد، اینها نیز باید پاک شوند. به طور کلی، مشکل این است که عمق دایرکتوری ها می تواند بسیار زیاد باشد. و واضح است که بازگشت خود را نشان می دهد - فراخوانی یک تابع در درون خود.

با وجود پیچیدگی ظاهری الگوریتم، پیاده سازی بسیار ساده و شفاف است:

تابع removeDirectory($dir) (
اگر ($objs = glob($dir."/*")) (
foreach ($objs به عنوان $obj) (
is_dir($obj) ? removeDirectory($obj) : unlink($obj);
}
}
rmdir($dir);
}
?>

سعی می کنم به زبان واضح الگوریتم این تابع را توضیح دهم. اول از همه، ما لیستی از تمام فایل های داخل یک پوشه مشخص را دریافت می کنیم. اگر آنها آنجا نیستند، بلافاصله آن را حذف کنید. اگر آنها وجود داشته باشند، ما شروع به مرتب کردن آنها یک به یک می کنیم. اگر عنصر یک فایل است، به سادگی آن را حذف کنید ( لغو پیوند ($obj)). اگر این یک دایرکتوری است، با عبور از این دایرکتوری، تابع خود را دوباره فراخوانی می کنیم. این بازگشت است: تابع خود را فراخوانی می کند. پس از فراخوانی تابع، همه چیز دوباره شروع می شود، اما با دایرکتوری متفاوت. تمام فایل های آن نیز حذف می شوند و همه دایرکتوری های آن به این تابع بازگردانده می شوند. وقتی همه دایرکتوری ها و فایل ها حذف می شوند، دایرکتوری خالی از قبل حذف می شود.

این را به شما خواهم گفت، این الگوریتم از نظر عملی چندان مفید نیست (اغلب لازم نیست حذف دایرکتوری ها با فایل های PHP) چقدر برای رشد تفکر شما مفید است. این یک الگوریتم بسیار ساده است و یک مسئله بسیار بسیار پیچیده را حل می کند. بنابراین، یاد بگیرید که الگوریتم ها را بنویسید - این مهمترین چیز در هر زبان برنامه نویسی است.

PHP یک زبان برنامه نویسی است که در درجه اول برای ایجاد صفحات وب پویا استفاده می شود. مانند هر زبان برنامه نویسی دیگری، PHP دارای ویژگی های زیادی از جمله بسیاری از موارد مفید است. به عنوان مثال، امکان حذف یک فایل که می توانید از آن در اسکریپت های خود استفاده کنید.

این نکته به شما کمک می کند تا یاد بگیرید چگونه حذف فایل در PHPبا استفاده از تابع لغو پیوند.

آموزش گام به گام:

برای حذف یک فایل در PHP می توانید از تابع استفاده کنید لغو پیوند. با استفاده از یک اسکریپت ساده به عنوان مثال، بیایید به نحوه عملکرد آن نگاه کنیم لغو پیوند:

  1. یک فایل متنی در یک ویرایشگر متن (vi/vim، nano، gedit یا فقط Notepad استاندارد) ایجاد کنید.
  2. کد زیر را تایپ کرده یا به سادگی در آن کپی کنید:$file="example.log";
    unlink ($file);
    ?>
  3. ذخیره کنید (به عنوان مثال، تحت نام testunlink.php) و فایل اسکریپت ایجاد شده را در وب سرور آزمایشی خود قرار دهید. در همان دایرکتوری، یک فایل example.log با هر محتوایی ایجاد کنید. این چیزی است که ما حذف خواهیم کرد.
  4. اسکریپت را با فراخوانی آن در مرورگر خود اجرا کنید، و هنگامی که دوباره به دایرکتوری نگاه کنید، متوجه خواهید شد که فایل example.log دیگر وجود ندارد. لغو پیوندترفند را انجام داد!

چگونه همه کار می کند:

خط اول کد اسکریپت: نوع اسکریپت خود را تعیین می کنیم.

خط دوم کد: پس از اجرای اسکریپتی که ایجاد کردیم، به متغیر فایل مقدار داده می شود example.log(توجه داشته باشید که فایلی با همان نام باید در همان دایرکتوری اسکریپتی که ما ایجاد کردیم وجود داشته باشد. کافیست آن را با هر محتوایی ایجاد کنید!).

خط سوم کد: فایل example.log را با ارسال آن به عنوان آرگومان به تابع unlink حذف کنید.

خط چهارم کد اسکریپت: انتهای کد php.