چگونه فایل‌ها را از طریق لاراول یا PHP حذف کنیم؟

بسیاری از مواقع قصد داریم همزمان با حذف کردن یک رکورد، فایل‌های مربوط به آن رکورد را نیز حذف نماییم. حال ممکن است چندین و چند فایل مربوط به یک رکورد در دایرکتوری مورد نظر وجود داشته باشند.

با این فرض که دایرکتوری و فایل‌های من در public قرار داشته باشند، به صورت زیر در کنترلر خود عمل می‌کنم:

نکته: توجه داشته باشید این مورد صرفاً یک سمپل است و شما می‌توانید آن را بسیار بهتر بنویسید.

سناریو: ابتدا دایرکتوری یک رکورد تشخیص داده می‌شود و در صورتی که در دایرکتوری مربوطه فایل‌هایی وجود داشته باشند، تمامشان حذف و سپس خود دایرکتوری حذف و بعد از آن هم رکورد مربوطه حذف خواهد شد. اما در صورتی که دایرکتوری وجود نداشته باشد، رکورد حذف خواهد شد.

public function destroy(User $user)
{
	try {
		$url = explode('/', $user->image1); //پیدا کردن مسیر دایرکتوری از یکی از فایلها
		array_pop($url); //بیرون انداختن قسمت آخر
		$folderPath = 'doc_files/' . implode('/', $url); //تشکیل مسیر دایرکتوری روی سرور

		if (is_dir($folderPath)) {
			$files = glob("$folderPath/*"); //دریافت تمام فایلهای داخل دایرکتوری در صورت وجود

			//حذف تمام فایلهای داخل دایرکتوری
			foreach ($files as $file) {
				if (is_file($file)) {
					unlink($file); //delete file
				}
			}

			rmdir($folderPath); //حذف دایرکتوری

			User::destroy($user->id);

			return redirect('/administrator/requests/pending')->with('success', 'حذف با موفقیت انجام شد');
		}

		User::destroy($user->id);
		
		return redirect('/administrator/requests/pending')->with('error', 'فایل و پوشه مورد نظر یافت نشد');
	} catch (QueryException $ex) {
		dd($ex->getMessage());
	}
}

تمام موارد لازم را نیز به صورت فارسی کامنت‌گذاری کرده‌ام تا ابهامی رخ ندهد.

درباره نویسنده: احسان

مطالب زیر را حتما بخوانید