New: Add patch to allow export of database with no mysqldump access.
Still bugged.
This commit is contained in:
parent
10959d0dcc
commit
7ed4400c03
@ -43,13 +43,25 @@ llxHeader('','','EN:Backups|FR:Sauvegardes|ES:Copias_de_seguridad');
|
|||||||
?>
|
?>
|
||||||
<script type="text/javascript" language="javascript">
|
<script type="text/javascript" language="javascript">
|
||||||
jQuery(document).ready(function() {
|
jQuery(document).ready(function() {
|
||||||
|
|
||||||
|
function hideoptions () {
|
||||||
jQuery("#mysql_options").hide();
|
jQuery("#mysql_options").hide();
|
||||||
|
jQuery("#mysql_options_nobin").hide();
|
||||||
jQuery("#postgresql_options").hide();
|
jQuery("#postgresql_options").hide();
|
||||||
|
}
|
||||||
|
|
||||||
|
hideoptions();
|
||||||
|
|
||||||
jQuery("#radio_dump_mysql").click(function() {
|
jQuery("#radio_dump_mysql").click(function() {
|
||||||
|
hideoptions();
|
||||||
jQuery("#mysql_options").show();
|
jQuery("#mysql_options").show();
|
||||||
});
|
});
|
||||||
|
jQuery("#radio_dump_mysql_nobin").click(function() {
|
||||||
|
hideoptions();
|
||||||
|
jQuery("#mysql_options_nobin").show();
|
||||||
|
});
|
||||||
jQuery("#radio_dump_postgresql").click(function() {
|
jQuery("#radio_dump_postgresql").click(function() {
|
||||||
|
hideoptions();
|
||||||
jQuery("#postgresql_options").show();
|
jQuery("#postgresql_options").show();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@ -79,7 +91,7 @@ if ($_GET["msg"])
|
|||||||
name="token" value="<?php echo $_SESSION['newtoken']; ?>" /> <input
|
name="token" value="<?php echo $_SESSION['newtoken']; ?>" /> <input
|
||||||
type="hidden" name="export_type" value="server" />
|
type="hidden" name="export_type" value="server" />
|
||||||
|
|
||||||
<fieldset id="fieldsetexport"><!-- LDR -->
|
<fieldset id="fieldsetexport">
|
||||||
<?php print '<legend>'.$langs->trans("DatabaseName").' : <b>'.$dolibarr_main_db_name.'</b></legend>'; ?>
|
<?php print '<legend>'.$langs->trans("DatabaseName").' : <b>'.$dolibarr_main_db_name.'</b></legend>'; ?>
|
||||||
<table>
|
<table>
|
||||||
<tr>
|
<tr>
|
||||||
@ -94,8 +106,13 @@ if ($_GET["msg"])
|
|||||||
<div class="formelementrow"><input type="radio" name="what" value="mysql" id="radio_dump_mysql" />
|
<div class="formelementrow"><input type="radio" name="what" value="mysql" id="radio_dump_mysql" />
|
||||||
<label for="radio_dump_mysql">MySQL Dump (mysqldump)</label>
|
<label for="radio_dump_mysql">MySQL Dump (mysqldump)</label>
|
||||||
</div>
|
</div>
|
||||||
|
<?php if (! empty($conf->global->MAIN_FEATURES_LEVEL)) { ?>
|
||||||
|
<div class="formelementrow"><input type="radio" name="what" value="mysqlnobin" id="radio_dump_mysql_nobin" />
|
||||||
|
<label for="radio_dump_mysql">MySQL Dump (php) <?php print img_warning('Backup can\'t be guaranted with this method. Prefer previous one'); ?></label>
|
||||||
|
</div>
|
||||||
<?php
|
<?php
|
||||||
}
|
}
|
||||||
|
}
|
||||||
else if ($db->label == 'PostgreSQL')
|
else if ($db->label == 'PostgreSQL')
|
||||||
{
|
{
|
||||||
?>
|
?>
|
||||||
@ -327,7 +344,6 @@ print "\n";
|
|||||||
$result=$formfile->show_documents('systemtools','backup',$conf->admin->dir_output.'/backup',$_SERVER['PHP_SELF'],0,1,'',1,0,0,54,0,'',$langs->trans("PreviousDumpFiles"));
|
$result=$formfile->show_documents('systemtools','backup',$conf->admin->dir_output.'/backup',$_SERVER['PHP_SELF'],0,1,'',1,0,0,54,0,'',$langs->trans("PreviousDumpFiles"));
|
||||||
//if ($result) print '<br><br>';
|
//if ($result) print '<br><br>';
|
||||||
|
|
||||||
$db->close();
|
|
||||||
|
|
||||||
llxFooter();
|
llxFooter();
|
||||||
?>
|
|
||||||
|
$db->close();
|
||||||
|
|||||||
@ -31,8 +31,7 @@ $file=isset($_POST['filename_template']) ? $_POST['filename_template'] : '';
|
|||||||
|
|
||||||
$langs->load("admin");
|
$langs->load("admin");
|
||||||
|
|
||||||
if (! $user->admin)
|
if (! $user->admin) accessforbidden();
|
||||||
accessforbidden();
|
|
||||||
|
|
||||||
|
|
||||||
if ($file && ! $what)
|
if ($file && ! $what)
|
||||||
@ -212,6 +211,30 @@ if ($what == 'mysql')
|
|||||||
// Fin execution commande
|
// Fin execution commande
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($what == 'mysqlnobin')
|
||||||
|
{
|
||||||
|
$outputdir = $conf->admin->dir_output.'/backup';
|
||||||
|
$outputfile = $outputdir.'/'.$file;
|
||||||
|
$outputfiletemp = $outputfile.'-TMP.sql';
|
||||||
|
// for compression format, we add extension
|
||||||
|
$compression=isset($_POST['compression']) ? $_POST['compression'] : 'none';
|
||||||
|
if ($compression == 'gz') $outputfile.='.gz';
|
||||||
|
if ($compression == 'bz') $outputfile.='.bz2';
|
||||||
|
$outputerror = $outputfile.'.err';
|
||||||
|
dol_mkdir($conf->admin->dir_output.'/backup');
|
||||||
|
|
||||||
|
if ($compression == 'gz' or $compression == 'bz')
|
||||||
|
{
|
||||||
|
backup_tables($outputfiletemp);
|
||||||
|
dol_compress_file($outputfiletemp, $outputfile, $compression);
|
||||||
|
unlink($outputfiletemp);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
backup_tables($outputfile);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// POSTGRESQL
|
// POSTGRESQL
|
||||||
if ($what == 'postgresql')
|
if ($what == 'postgresql')
|
||||||
{
|
{
|
||||||
@ -315,4 +338,118 @@ print '<br>';
|
|||||||
$time_end = time();
|
$time_end = time();
|
||||||
|
|
||||||
llxFooter();
|
llxFooter();
|
||||||
|
|
||||||
|
$db->close();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// MYSQL NO BINARIES (only php)
|
||||||
|
/** Backup the db OR just a table without mysqldump binary (does not require any exec permission)
|
||||||
|
* Author: David Walsh (http://davidwalsh.name/backup-mysql-database-php)
|
||||||
|
* Updated and enhanced by Stephen Larroque (lrq3000) and by the many commentators from the blog
|
||||||
|
*
|
||||||
|
* @param string $outputfile Output file name
|
||||||
|
* @param string $tables Table name or '*' for all
|
||||||
|
* @return int <0 if KO, >0 if OK
|
||||||
|
*
|
||||||
|
* FIXME Must add directives to have restore working even with constraints not loaded into correct order, etc...
|
||||||
|
*/
|
||||||
|
function backup_tables($outputfile, $tables='*')
|
||||||
|
{
|
||||||
|
global $db, $langs;
|
||||||
|
global $errormsg;
|
||||||
|
|
||||||
|
// Set to UTF-8
|
||||||
|
$db->query('SET NAMES utf8');
|
||||||
|
$db->query('SET CHARACTER SET utf8');
|
||||||
|
|
||||||
|
//get all of the tables
|
||||||
|
if ($tables == '*')
|
||||||
|
{
|
||||||
|
$tables = array();
|
||||||
|
$result = $db->query('SHOW FULL TABLES WHERE Table_type = \'BASE TABLE\'');
|
||||||
|
while($row = $db->fetch_row($result))
|
||||||
|
{
|
||||||
|
$tables[] = $row[0];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$tables = is_array($tables) ? $tables : explode(',',$tables);
|
||||||
|
}
|
||||||
|
|
||||||
|
//cycle through
|
||||||
|
$handle = fopen($outputfile, 'w+');
|
||||||
|
if (fwrite($handle, '') === FALSE)
|
||||||
|
{
|
||||||
|
$langs->load("errors");
|
||||||
|
dol_syslog("Failed to open file ".$outputfile,LOG_ERR);
|
||||||
|
$errormsg=$langs->trans("ErrorFailedToWriteInDir");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
foreach($tables as $table)
|
||||||
|
{
|
||||||
|
$sql='SELECT * FROM '.$table;
|
||||||
|
$result = $db->query($sql);
|
||||||
|
$num_fields = $db->num_rows($result);
|
||||||
|
|
||||||
|
fwrite($handle,'DROP TABLE IF EXISTS '.$table);
|
||||||
|
$resqldrop=$db->query('SHOW CREATE TABLE '.$table);
|
||||||
|
$row2 = $db->fetch_row($resqldrop);
|
||||||
|
fwrite($handle,"\n\n".$row2[1].";\n\n");
|
||||||
|
|
||||||
|
while($row = $db->fetch_row($result))
|
||||||
|
{
|
||||||
|
fwrite($handle,'INSERT INTO '.$table.' VALUES(');
|
||||||
|
$columns = count($row);
|
||||||
|
for($j=0; $j<$columns; $j++)
|
||||||
|
{
|
||||||
|
$row[$j] = addslashes($row[$j]);
|
||||||
|
$row[$j] = preg_replace("#\n#", "\\n", $row[$j]);
|
||||||
|
if (isset($row[$j])) { fwrite($handle,'"'.$row[$j].'"'); } else { fwrite($handle,'""'); }
|
||||||
|
if (isset($row[$j]))
|
||||||
|
{
|
||||||
|
if ($row[$j] == null)
|
||||||
|
{
|
||||||
|
fwrite($handle,'"null"');
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
fwrite($handle,'"'.$row[$j].'"');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
fwrite($handle,'""');
|
||||||
|
}
|
||||||
|
if ($j<($num_fields-1)) { fwrite($handle,','); }
|
||||||
|
}
|
||||||
|
fwrite($handle,");\n");
|
||||||
|
}
|
||||||
|
fwrite($handle,"\n\n\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Backup Procedure structure*/
|
||||||
|
/*
|
||||||
|
$result = $db->query('SHOW PROCEDURE STATUS');
|
||||||
|
if ($db->num_rows($result) > 0)
|
||||||
|
{
|
||||||
|
while ($row = $db->fetch_row($result)) { $procedures[] = $row[1]; }
|
||||||
|
foreach($procedures as $proc)
|
||||||
|
{
|
||||||
|
fwrite($handle,"DELIMITER $$\n\n");
|
||||||
|
fwrite($handle,"DROP PROCEDURE IF EXISTS '$name'.'$proc'$$\n");
|
||||||
|
$resqlcreateproc=$db->query("SHOW CREATE PROCEDURE '$proc'");
|
||||||
|
$row2 = $db->fetch_row($resqlcreateproc);
|
||||||
|
fwrite($handle,"\n".$row2[2]."$$\n\n");
|
||||||
|
fwrite($handle,"DELIMITER ;\n\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
/* Backup Procedure structure*/
|
||||||
|
|
||||||
|
fclose($handle);
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
?>
|
?>
|
||||||
|
|||||||
@ -873,9 +873,11 @@ function dol_remove_file_process($filenb,$donotupdatesession=0,$donotdeletefile=
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Convert file to image
|
* Convert an image file into antoher format.
|
||||||
* @param file Input file name
|
* This need Imagick php extension.
|
||||||
* @param ext Extension of target file
|
*
|
||||||
|
* @param string $file Input file name
|
||||||
|
* @param string $ext Extension of target file
|
||||||
*/
|
*/
|
||||||
function dol_convert_file($file,$ext='png')
|
function dol_convert_file($file,$ext='png')
|
||||||
{
|
{
|
||||||
@ -906,4 +908,34 @@ function dol_convert_file($file,$ext='png')
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Compress a file
|
||||||
|
*
|
||||||
|
* @param string $inputfile Source file name
|
||||||
|
* @param string $outputfile Target file name
|
||||||
|
* @param string $mode 'gz' or 'bz'
|
||||||
|
*/
|
||||||
|
function dol_compress_file($inputfile, $outputfile, $mode="gz")
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
$data = implode("", file($inputfile));
|
||||||
|
if ($mode == 'gz') $compressdata = gzencode($data, 9);
|
||||||
|
elseif ($mode == 'bz') $compressdata = bzcompress($data, 9);
|
||||||
|
|
||||||
|
$fp = fopen($outputfile, "w");
|
||||||
|
fwrite($fp, $compressdata);
|
||||||
|
fclose($fp);
|
||||||
|
}
|
||||||
|
catch (Exception $e)
|
||||||
|
{
|
||||||
|
global $langs, $errormsg;
|
||||||
|
$langs->load("errors");
|
||||||
|
dol_syslog("Failed to open file ".$outputfile,LOG_ERR);
|
||||||
|
$errormsg=$langs->trans("ErrorFailedToWriteInDir");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
?>
|
?>
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user