کد PHP بک آپ گرفتن از پوشه و فایل در فایل منیجر

یاسین سرلک
عضو
عضو شده: 2021-06-24 12:28:25
2021-07-26 07:39:11

سلام من میخوام بدونم میشه در php یک کد نوشت که از فایل ها بکاپ بگیره؟ اگه هست میتونید کدش رو بدید؟ ممنون میشم

مسیح دیندار
مدیریت
عضو شده: 2021-04-12 14:23:35
2021-07-26 08:32:25

سلام؛

برای اینکار، شما باید روی هاستتون، ماژول PHP به نام ZIP رو فعال کنید. این ماژول روی سی پنل وجود داره و می تونید از قسمت Select PHP Version فعالش کنید یا اگه به قسمت ماژول ها دسترسی ندارید باید به هاستینگ تیکت بزنید و ازشون بخواهید این ماژول رو براتون فعال کنند.

بعد از اینکه مطمئن شدید این ماژول یا تابع PHP روی هاستتون فعال شده، وارد پوشه ای که فایل هاتون داخلش هست و می خواهید محتویات اون پوشه به همراه زیرمجموعه ها و زیرشاخه هاش، در قالب یک فایل فشرده .zip ذخیره بشه، یک فایل به نام backup.php ایجاد کنید و کد زیر رو داخلش قرار بدید:

<?php
// تعیین میزان مصرف منابع برای اجرای بک آپ گرفتن. برای پوشه های سنگین باید مقادیر بیشتری وارد کنید
ini_set('max_execution_time', 600);
ini_set('memory_limit', '1024M');

// محل ذخیره فایل بک آپ و نام فایل را اینجا تنظیم کنید
zipData('EsmePooshe', 'backup.zip');
echo 'فایل بک آپ با موفقیت ساخته شد';

function zipData($source, $destination) {
	if (extension_loaded('zip')) {
		if (file_exists($source)) {
			$zip = new ZipArchive();
			if ($zip->open($destination, ZIPARCHIVE::CREATE)) {
				$source = realpath($source);
				if (is_dir($source)) {
					$files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($source, RecursiveDirectoryIterator::SKIP_DOTS), RecursiveIteratorIterator::SELF_FIRST);
					foreach ($files as $file) {
						$file = realpath($file);
						if (is_dir($file)) {
							$zip->addEmptyDir(str_replace($source . '/', '', $file . '/'));
						} else if (is_file($file)) {
							$zip->addFromString(str_replace($source . '/', '', $file), file_get_contents($file));
						}
					}
				} else if (is_file($source)) {
					$zip->addFromString(basename($source), file_get_contents($source));
				}
			}
			return $zip->close();
		}
	}
	return false;
}
?>

تنظیمات:

بجای EsmePooshe باید نام یک پوشه دلخواه در همون مسیری که فایل بک آپ هست و می خواهید ازش بک آپ گرفته بشه رو وارد کنید و بجای backup.zip می تونید هر نام دلخواه برای فایل بک آپ وارد کنید. فقط فرمت zip رو آخرش قرار بدید!

 

و اگر کد بالا به هر دلیلی با سرور شما سازگاری نداشت، می تونید بجاش از این کد استفاده کنید. مثل روش قبل یک فایل بسازید در محل مورد نظر و این رو داخلش قرار بدید:

<?php 
// اسم پوشه ای که می خواهید از اون یک فایل بک آپ ساخته بشه رو وارد کنید
$rootPath = realpath('EsmePooshe');

$zip = new ZipArchive();
$zip->open('file.zip', ZipArchive::CREATE | ZipArchive::OVERWRITE);

$files = new RecursiveIteratorIterator(
    new RecursiveDirectoryIterator($rootPath),
    RecursiveIteratorIterator::LEAVES_ONLY
);

foreach ($files as $name => $file)
{
    if (!$file->isDir())
    {
        $filePath = $file->getRealPath();
        $relativePath = substr($filePath, strlen($rootPath) + 1);
        $zip->addFile($filePath, $relativePath);
    }
}
$zip->close();
?>

تنظیمات:

بجای EsmePooshe باید نام پوشه ای رو وارد کنید که می خواهید ازش بک آپ گرفته بشه. دقت کنید که فایل حاوی کدهای بک آپ باید داخل همون پوشه ای قرار داشته باشه که همین پوشه قرار داره. یعنی پوشه ای که محتویاتش قراره بک آپ گرفته بشه باید در همون مسیر هم فایل با کدهای بالا قرار داشته باشه.

بجای file.zip هم می تونید نام دلخواه برای فایل بک آپ وارد کنید.