126 Zeilen
3,9 KiB
PHP
126 Zeilen
3,9 KiB
PHP
<?php
|
|
/**
|
|
* This file is part of MySQLDumper released under the GNU/GPL 2 license
|
|
* http://www.mysqldumper.net
|
|
*
|
|
* @package MySQLDumper
|
|
* @subpackage File
|
|
* @version SVN: $rev: 1207 $
|
|
* @author $Author$
|
|
*/
|
|
|
|
/**
|
|
* Dumpfile-Helper Class
|
|
*
|
|
* Class offers some methods for file handling
|
|
*
|
|
* @package MySQLDumper
|
|
* @subpackage File
|
|
*/
|
|
class Msd_File_Dump extends Msd_File
|
|
{
|
|
/**
|
|
* Get statusline information from backup file
|
|
*
|
|
* @param string $filename Name of file to read
|
|
*
|
|
* @param array
|
|
*/
|
|
public static function getStatusline($filename)
|
|
{
|
|
$config = Msd_Registry::getConfig();
|
|
$path = $config->getParam('paths.backup'). '/';
|
|
if (strtolower(substr($filename, -3)) == '.gz') {
|
|
$fileHandle = gzopen($path . $filename, "r");
|
|
if ($fileHandle === false) {
|
|
throw new Exception('Can\'t open file '.$filename);
|
|
}
|
|
$statusline = gzgets($fileHandle, 40960);
|
|
gzclose($fileHandle);
|
|
} else {
|
|
$fileHandle=fopen($path . $filename, "r");
|
|
if ($fileHandle === false) {
|
|
throw new Exception('Can\'t open file '.$filename);
|
|
}
|
|
$statusline = fgets($fileHandle, 5000);
|
|
fclose($fileHandle);
|
|
}
|
|
return self::_explodeStatusline($statusline);
|
|
}
|
|
|
|
/**
|
|
* Get information from stausline string
|
|
*
|
|
* @param string $line
|
|
*
|
|
* @return array
|
|
*/
|
|
private function _explodeStatusline($line)
|
|
{
|
|
/*Construction of statusline (first line in backup file):
|
|
-- Status : NrOfTables : nrOfRecords : Multipart : DatabaseName :
|
|
script : scriptversion : Comment : MySQLVersion :
|
|
Backupflags (unused): SQLBefore : SQLAfter : Charset : EXTINFO
|
|
*/
|
|
$statusline = array();
|
|
$compare = substr($line, 0, 8);
|
|
if ( $compare != '# Status' && $compare != '-- Statu') {
|
|
// not a backup of MySQLDumper
|
|
return self::_getDefaultStatusline();
|
|
} else {
|
|
// extract informationen
|
|
$flag = explode(':', $line);
|
|
if (count($flag)<12) {
|
|
// fill missing elements for backwards compatibility
|
|
array_pop($flag);
|
|
for ($i = count($flag) - 1; $i < 12; $i++) {
|
|
$flag[]='';
|
|
}
|
|
}
|
|
$statusline['tables'] = $flag[1];
|
|
$statusline['records'] = $flag[2];
|
|
if ($flag[3] == '' || $flag[3] == 'MP_0') {
|
|
$statusline['part']= 'MP_0';
|
|
} else {
|
|
$statusline['part'] = $flag[3];
|
|
}
|
|
$statusline['dbname'] = $flag[4];
|
|
$statusline['script'] = $flag[5];
|
|
$statusline['scriptversion'] = $flag[6];
|
|
$statusline['comment'] = $flag[7];
|
|
$statusline['mysqlversion'] = $flag[8];
|
|
$statusline['flags'] = $flag[9];
|
|
$statusline['sqlbefore'] = $flag[10];
|
|
$statusline['sqlafter'] = $flag[11];
|
|
if ( isset($flag[12]) && trim($flag[12])!='EXTINFO') {
|
|
$statusline['charset']=$flag[12];
|
|
} else {
|
|
$statusline['charset']='?';
|
|
}
|
|
}
|
|
return $statusline;
|
|
}
|
|
|
|
/**
|
|
* Get default statusline
|
|
*
|
|
* @return array
|
|
*/
|
|
private function _getDefaultStatusline()
|
|
{
|
|
$statusline['tables'] = -1;
|
|
$statusline['records'] = -1;
|
|
$statusline['part'] = 'MP_0';
|
|
$statusline['dbname'] = 'unknown';
|
|
$statusline['script'] = '';
|
|
$statusline['scriptversion'] = '';
|
|
$statusline['comment'] = '';
|
|
$statusline['mysqlversion'] = 'unknown';
|
|
$statusline['flags'] = '2222222';
|
|
$statusline['sqlbefore'] = '';
|
|
$statusline['sqlafter'] = '';
|
|
$statusline['charset'] = '?';
|
|
return $statusline;
|
|
}
|
|
|
|
}
|