* add file header in backup file.
This commit is contained in:
@@ -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,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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user