* add file header in backup file.

This commit is contained in:
wangyidong
2013-12-22 07:51:50 +00:00
parent a1a587a2af
commit 6b092dbde9
3 changed files with 94 additions and 9 deletions
+6 -8
View File
@@ -81,14 +81,7 @@ class backup extends control
echo js::alert(sprintf($this->lang->backup->error->noWritable, $this->backupPath));
die(js::reload('parent'));
}
$fp = fopen($this->backupPath . $fileName . '.sql.php', 'r');
$tmp = fopen($this->backupPath . $fileName . '.sql.php.tmp', 'w');
fwrite($tmp, "#<?php die()?>;\n");
while(($buffer = fgets($fp)) !== false) fwrite($tmp, $buffer);
fclose($fp);
fclose($tmp);
rename($this->backupPath . $fileName . '.sql.php.tmp', $this->backupPath . $fileName . '.sql.php');
$this->backup->addFileHeader($this->backupPath . $fileName . '.sql.php');
if(extension_loaded('zlib'))
{
@@ -98,6 +91,7 @@ class backup extends control
echo js::alert(sprintf($this->lang->backup->error->backupFile, $result->error));
die(js::reload('parent'));
}
$this->backup->addFileHeader($this->backupPath . $fileName . '.file.zip.php');
}
echo js::alert($this->lang->backup->success->backup);
@@ -122,7 +116,9 @@ class backup extends control
set_time_limit(0);
/* Restore database. */
$this->backup->removeFileHeader($this->backupPath . $fileName . '.sql.php');
$result = $this->backup->restoreSQL($this->backupPath . $fileName . '.sql.php');
$this->backup->addFileHeader($this->backupPath . $fileName . '.sql.php');
if(!$result->result)
{
echo js::alert(sprintf($this->lang->backup->error->restoreSQL, $result->error));
@@ -132,7 +128,9 @@ class backup extends control
/* Restore attatchments. */
if(file_exists($this->backupPath . $fileName . '.file.zip.php'))
{
$this->backup->removeFileHeader($this->backupPath . $fileName . '.file.zip.php');
$result = $this->backup->restoreFile($this->backupPath . $fileName . '.file.zip.php');
$this->backup->addFileHeader($this->backupPath . $fileName . '.file.zip.php');
if(!$result->result)
{
echo js::alert(sprintf($this->lang->backup->error->restoreFile, $result->error));
+85
View File
@@ -85,4 +85,89 @@ class backupModel extends model
return $return;
}
/**
* Add file header.
*
* @param string $fileName
* @access public
* @return bool
*/
public function addFileHeader($fileName)
{
$firstline = false;
$die = "<?php die();?>\n";
$fileSize = filesize($fileName);
$fh = fopen($fileName, 'c+');
$delta = strlen($die);
while(true)
{
$offset = ftell($fh);
$line = fread($fh, 1024 * 1024);
if(!$firstline)
{
$line = $die . $line;
$firstline = true;
}
else
{
$line = $compensate . $line;
}
$compensate = fread($fh, $delta);
fseek($fh, $offset);
fwrite($fh, $line);
if(ftell($fh) >= $fileSize)
{
fwrite($fh, $compensate);
break;
}
}
fclose($fh);
return true;
}
/**
* Remove file header.
*
* @param string $fileName
* @access public
* @return bool
*/
public function removeFileHeader($fileName)
{
$firstline = false;
$die = "<?php die();?>\n";
$fileSize = filesize($fileName);
$fh = fopen($fileName, 'c+');
while(true)
{
$offset = ftell($fh);
if($firstline and $delta) fseek($fh, $offset + $delta);
$line = fread($fh, 1024 * 1024);
if(!$firstline)
{
$firstline = true;
$beforeLength = strlen($line);
$line = str_replace($die, '', $line);
$afterLength = strlen($line);
$delta = $beforeLength - $afterLength;
if($delta == 0)
{
fclose($fh);
return true;
}
}
fseek($fh, $offset);
fwrite($fh, $line);
if(ftell($fh) >= $fileSize - $delta) break;
}
ftruncate($fh, ($fileSize - $delta));
fclose($fh);
return true;
}
}
+3 -1
View File
@@ -112,7 +112,8 @@ $lang->admin->menuOrder[20] = 'editor';
$lang->admin->menuOrder[25] = 'mail';
$lang->admin->menuOrder[30] = 'custom';
$lang->admin->menuOrder[40] = 'convert';
$lang->admin->menuOrder[45] = 'trashes';
$lang->admin->menuOrder[45] = 'backup';
$lang->admin->menuOrder[50] = 'trashes';
$lang->convert->menuOrder = $lang->admin->menuOrder;
$lang->upgrade->menuOrder = $lang->admin->menuOrder;
$lang->action->menuOrder = $lang->admin->menuOrder;
@@ -121,3 +122,4 @@ $lang->custom->menuOrder = $lang->admin->menuOrder;
$lang->editor->menuOrder = $lang->admin->menuOrder;
$lang->mail->menuOrder = $lang->admin->menuOrder;
$lang->custom->menuOrder = $lang->admin->menuOrder;
$lang->backup->menuOrder = $lang->admin->menuOrder;