بکاپ گرفتن از دیتابیس mysql با PHP

بکاپ گرفتن از دیتابیس mysql با PHP

بکاپ گرفتن دیتابیس با PHP – آموزش backup گرفتن پایگاه داده با کمک PHP یکی از مباحث مهمی است که یک برنامه نویس back-end باید به آن مسلط باشد .

با مطالعه این مقاله یاد خواهید گرفت چگونه یک خروجی از اطلاعات دیتابیس بدون phpmyadmin داشته باشید .

همچنین همان فایل بدست آمده ( backup ) را بازگردانی می کنیم .

دموی برنامه


اسکریپت index.php

<?php
$action = @$_GET['action'];
if($action == "import"){
	require_once "imp.php";
}else if($action == "export"){
	require_once "exp.php";
}

?>
<!DOCTYPE html>
<html lang="fa">
<head>
    <meta charset="UTF-8">
    <title>Rapidcode.iR - سورس کد</title>
    <link rel="stylesheet" href="static/css/main.css">
</head>
<body>
    <div class="container">
        <a id="introduce" href="https://rapidcode.ir" target="_blank">رپید کد • کتابخانه مجازی برنامه نویسان</a>
		
		<?php if(@$_GET['msg']): ?>		
			<div class="message"><?php echo @$_GET['msg'] ?></div>	
		<?php endif; ?>
		
        <form enctype="multipart/form-data" action="./?action=import" method="post">
		<input type="file" name="backup">
		<button class="btn" id="upload">آپلود بکاپ</button>
		</form>
		
		<a target="_blank" id="export" class="btn" href="./?action=export">بکاپ از دیتابیس</a>
    </div>
</body>
</html>


اسکریپت exp.php فایل خروجی از دیتابیس

<?php

$mysqli = new mysqli("localhost", "root", "", "wpx");
if ($mysqli->connect_error) {
    die("MYSQL ISSUE : " . $mysqli->connect_error);
}
 
$mysqli->set_charset("utf8");

function getData($uquery , $is_table){
	global $mysqli;
	$query = $uquery;
	$rows = [];
 
	if ($res = $mysqli->query($query)) {
     if ($res->num_rows) {
        while ($row = $res->fetch_assoc()) {
            $rows[] = $is_table ? end($row) : $row;
        }
     }
 
     $res->close();
    }
	return $rows;
}

$tables = getData("show tables" , true);
$jsonData = "";

foreach($tables as $table){
	$jsonData .= "\n###{$table}###\n";
	$tableCreate = (getData("SHOW CREATE TABLE {$table}" , true))[0];
	$tableCreate = preg_replace('/\r\n|\n\r|\n|\r/',"",$tableCreate);
	$jsonData .= "%%%{$tableCreate}%%%\n";
	$query = "SELECT * FROM `{$table}`";
	$rows = getData($query , false);
	$rows = json_encode($rows);
	$jsonData .= $rows;
}


$mysqli->close();

header('Content-Type: text/plain'); 
header('Content-Disposition: attachment; filename="database-backup.spx"');
echo $jsonData;
die();

?>


اسکریپت imp.php بازگردانی فایل backup

<?php

if(!empty($_FILES['backup'])){
	$file = $_FILES['backup'];
	$tmp_name = $file['tmp_name'];
	$backupPath = "backup/backup-" . time() . ".spx";
	move_uploaded_file($tmp_name, $backupPath);
}else{
	die("<h1>فایلی برای بکاپ ارسال نشد !</h1>");
}

$mysqli = new mysqli("localhost", "root", "", "wpx");
if ($mysqli->connect_error) {
    die("MYSQL ISSUE : " . $mysqli->connect_error);
}

$mysqli->set_charset("utf8");
$stmt = $mysqli->stmt_init();

$filepath = $backupPath;
$backupContent = file_get_contents($filepath);
$backupContent = explode("\n",$backupContent);
$backupContent = array_filter($backupContent, 'strlen');

$tableSeperator = "###";
$createTableSeperator = "%%%";

$table = "";
$createTable = "";

foreach($backupContent as $cnt){
	
	if(startsWith($cnt , $tableSeperator)){
		$table = $cnt;
		$table = getPureContent($table, $tableSeperator);
	}else if(startsWith($cnt , $createTableSeperator)){
		$createTable = $cnt;
		$createTable = getPureContent($createTable, $createTableSeperator);
		setDataRaw("DROP TABLE IF EXISTS `{$table}`");
		setDataRaw("SET SQL_MODE='ALLOW_INVALID_DATES'");
		setDataRaw($createTable);
	}else{
		$dataList = json_decode($cnt, true);
		foreach($dataList as $row){
			$values = (array) array_values($row);
			$valuePlaceholder = str_repeat("?,",count($values));
			$valuePlaceholder = substr($valuePlaceholder, 0, strlen($valuePlaceholder)-1);
			$query = "INSERT INTO `{$table}` VALUES ({$valuePlaceholder})";
			setData($query, $values);
		}
	}

}


function setData($uquery , $values){
	global $mysqli;
	global $stmt;
	
	$query = $uquery;
	$stmt->prepare($query);
	$type = str_repeat("s",count($values));
	$stmt->bind_param($type, ...$values);
	$inserted_id=0;
	if ($stmt->execute()) {
		$inserted_id = $stmt->affected_rows ? $stmt->insert_id : 0;
	}
	return $inserted_id;
}

function setDataRaw($uquery){
	global $mysqli;
	global $stmt;

	$query = $uquery;
	$stmt->prepare($query);
	$inserted_id=0;
	if ($stmt->execute()) {
		$inserted_id = $stmt->affected_rows ? $stmt->insert_id : 0;
	}

}

function startsWith ($string, $startString)
{
    $len = strlen($startString);
    return (substr($string, 0, $len) === $startString);
}

function endsWith($string, $endString)
{
    $len = strlen($endString);
    if ($len == 0) {
        return true;
    }
    return (substr($string, -$len) === $endString);
}

function getPureContent($string, $seperator){
	$seperatorLength = strlen($seperator);
	$finalString = substr($string, $seperatorLength);
	$finalString = substr($finalString, 0,-$seperatorLength);
	return $finalString;
}


$stmt->close();
$mysqli->close();

header("Location: {$_SERVER['PHP_SELF']}?msg=بکاپ+با+موفقیت+وارد+دیتابیس+شد");

?>


دانلود پروژه بکاپ گرفتن دیتابیس با PHP

ارسال نظر

جهت استفاده از کد حتما از تگ pre استفاده نمایید .

contact us

انجام انواع پروژه های وب


( فروشگاهی ، خبری ، رزرواسیون ، وردپرس ، حل مشکلات وردپرسی )

شماره تماس و واتساپ : 09398554859