PHPでソースコードとMySQLをバックアップ用プログラム
1.機能:
プラットフォームのソースコードおよびデータベースをバックアップ
2.bakfile.php
サンプルコード:
<?php
set_time_limit(0);
date_default_timezone_set('Asia/Tokyo’);
$dbHost = “localhost";
$dbUser = “root";
$dbPass = “startnews24";
$dbName = “mysql_startnews24";
$bakDir = 'D:/bak/’ . date('Y-m-d/H-i’) . '/’;
$sourceDir = 'G:/wamp/www/mark/re/App/’;
$errorlog = $bakDir . 'msg.log’;
if (!file_exists($bakDir) && !mkdir($bakDir, 0777, true)) {
exit (append($errorlog, 'フォルダを作成できませんでした!’));
}
if (!mysql_connect($dbHost, $dbUser, $dbPass)) {
exit (append($errorlog, 'データベース接続に失敗した’));
}
if (!mysql_select_db($dbName)) {
exit (append($errorlog, 'データベース"' . $dbName . '"存在しません’));
}
if (!file_exists($sourceDir)) {
exit (append($errorlog, 'ディレクトリ"' . $sourceDir . '"存在しません’));
}
mysql_query(“set names 'utf8′");
$mysql = “set charset utf8;\r\n";
$q1 = mysql_query(“show tables");
while ($t = mysql_fetch_array($q1)) {
$table = $t[0];
$q2 = mysql_query(“show create table `$table`");
$sql = mysql_fetch_array($q2);
$mysql .= $sql['Create Table’] . “;\r\n";
$q3 = mysql_query(“select * from `$table`");
while ($data = mysql_fetch_assoc($q3)) {
$keys = array_keys($data);
$keys = array_map('addslashes’, $keys);
$keys = join('`,`’, $keys);
$keys = “`" . $keys . “`";
$vals = array_values($data);
$vals = array_map('addslashes’, $vals);
$vals = join(“','", $vals);
$vals = “'" . $vals . “'";
$mysql .= “insert into `$table`($keys) values($vals);\r\n";
}
}
$filename = $bakDir . “db.sql";
write($filename, $mysql);
append($errorlog, 'データベースのバックアップを成功した’);
$zip = new ZipArchive();
if ($zip->open($bakDir . 'source.zip’, ZipArchive::CREATE) === TRUE) {
$files = map($sourceDir);
foreach ($files as $file) {
$dir = str_replace('\\’, '/’, $sourceDir);
$file = str_replace('\\’, '/’, $file);
$zip->addFile($file, str_replace($dir, ", $file));
}
$zip->close();
append($errorlog, 'ソースのバックアップを成功した’);
}
exit(append($errorlog, 'バックアップの成功’));
function append($file, $str) {
$str = date('Y-m-d H:i:s————————————' . PHP_EOL . $str . PHP_EOL);
$fh = fopen($file, 'a’);
flock($fh, LOCK_EX);
fwrite($fh, $str . PHP_EOL);
fclose($fh);
return $str;
}
function write($file, $str) {
$fp = fopen($file, 'w’);
flock($fp, LOCK_EX);
fputs($fp, $str);
fclose($fp);
return true;
}
function map($directory) {
$files = array();
if (file_exists($directory) && is_dir($directory)) {
foreach (new RecursiveIteratorIterator(new RecursiveDirectoryIterator($directory)) as $file) {
$files[] = $file->getRealPath();
}
}
return $files;
}
3.バックアッププログラム
@echo off
php.exe G:\bakfile.php
pause