Ich komm gerade irgendwie gar nicht weiter. Auch ewiges googlen hat mich zu keinem brauchbaren Ergebnis geführt.
Ich will mit einem Script ein Backup eines Ordners durchführen, jedoch beim Öffnen des Ordners bekomme ich die o.g. Fehlermeldung. Ich habs auch schon mit der Pseudoklasse dir versucht mit selbem, verzweifelnden Ergebnis.
Das Script:
Mit anderen Ordnern klappt es komischerweise schon, nur halt nicht mit den Ordnern die in mysql\data\ liegen.
Hat irgendjemand irgendeine Idee?
Vielen Dank im Voraus
Chrischan
(ps: ja mit exec('mysqldump'); hab ich es auch schon versucht, aber das will gar nicht. )
Edith:
Hier die Version mit opendir/readdir/closedir:
Ich will mit einem Script ein Backup eines Ordners durchführen, jedoch beim Öffnen des Ordners bekomme ich die o.g. Fehlermeldung. Ich habs auch schon mit der Pseudoklasse dir versucht mit selbem, verzweifelnden Ergebnis.
Das Script:
PHP:
/**
* Copy dirs (src: http://www.php.net/copy)
*
* @param string $srcdir
* @param string $dstdir
* @param int $offset
* @param bool $verbose
* @return string result_set
*/
function dir_copy($srcdir, $dstdir, $offset = '', $verbose = false)
{
if(!isset($offset)) $offset=0;
$num = 0;
$fail = 0;
$sizetotal = 0;
$fifail = '';
if(!is_dir($dstdir)) mkdir($dstdir);
if($curdir = dir($srcdir)) {
while($file = $curdir->read()) {
if($file != '.' && $file != '..') {
// $srcfile = $srcdir . '\\' . $file; # deleted by marajax
// $dstfile = $dstdir . '\\' . $file; # deleted by marajax
$srcfile = $srcdir . '/' . $file; # added by marajax
$dstfile = $dstdir . '/' . $file; # added by marajax
if(is_file($srcfile)) {
if(is_file($dstfile)) $ow = filemtime($srcfile) - filemtime($dstfile); else $ow = 1;
if($ow > 0) {
if($verbose) echo "Copying '$srcfile' to '$dstfile'...<br />";
if(copy($srcfile, $dstfile)) {
touch($dstfile, filemtime($srcfile)); $num++;
chmod($dstfile, 0777); # added by marajax
$sizetotal = ($sizetotal + filesize($dstfile));
if($verbose) echo "OK\n";
}
else {
echo "Error: File '$srcfile' could not be copied!<br />\n";
$fail++;
$fifail = $fifail.$srcfile.'|';
}
}
}
else if(is_dir($srcfile)) {
$res = explode(',',$ret);
$ret = dir_copy($srcfile, $dstfile, $verbose);
$mod = explode(',',$ret);
$imp = array($res[0] + $mod[0],$mod[1] + $res[1],$mod[2] + $res[2],$mod[3].$res[3]);
$ret = implode(',',$imp);
}
}
}
$curdir->close();
}
$red = explode(',',$ret);
$ret = ($num + $red[0]).','.(($fail-$offset) + $red[1]).','.($sizetotal + $red[2]).','.$fifail.$red[3];
return $ret;
}
$DataBaseName = 'webauth';
define('SRC_PATH', "C:\\apachefriends\\xampp\\mysql\\data\\".$DataBaseName."\\");
define('DST_PATH', "D:\\Daten\\User\\Backup\\". $DataBaseName .'__'. date('d.m.Y_H.i.s') ."\\" );
define('HOME_BUTTON', '<br /> <br /><input type="button" onClick="self.location.href=\''.$_SERVER['PHP_SELF'].'\'" value="zurück" />');
if(isset($_GET['start'])){
$result_set = dir_copy( SRC_PATH, DST_PATH );
$rst = explode( ',', $result_set );
echo '<h2>Backup der Datenbank <i>'.$DataBaseName.'</i></h2><br />'.$rst[0]. ' Dateien gesichert mit einer Gesamtgröße von '. (round(($rst[2]/1048576),2)) .'MB. <br />
Das Backup befindet sich auf <b>\\\\'. $_ENV["COMPUTERNAME"] .'</b> in dem Ordner <b>'. DST_PATH .'</b>
'.HOME_BUTTON;
}else{
print '<form method="GET"><input type="submit" name="start" value="Backup der Datenbank \''.$DataBaseName.'\' jetzt durchführen" /></form>';
}
Hat irgendjemand irgendeine Idee?
Vielen Dank im Voraus
Chrischan
(ps: ja mit exec('mysqldump'); hab ich es auch schon versucht, aber das will gar nicht. )
Edith:
Hier die Version mit opendir/readdir/closedir:
PHP:
/**
* Copy dirs (src: http://www.php.net/copy)
*
* @param string $srcdir
* @param string $dstdir
* @param int $offset
* @param bool $verbose
* @return string result_set
*/
function dir_copy($srcdir, $dstdir, $offset = '', $verbose = false)
{
if(!isset($offset)) $offset=0;
$num = 0;
$fail = 0;
$sizetotal = 0;
$fifail = '';
if(!is_dir($dstdir)) mkdir($dstdir);
if($curdir = opendir($srcdir)) {
while($file = readdir($curdir)) {
if($file != '.' && $file != '..') {
// $srcfile = $srcdir . '\\' . $file; # deleted by marajax
// $dstfile = $dstdir . '\\' . $file; # deleted by marajax
$srcfile = $srcdir . '/' . $file; # added by marajax
$dstfile = $dstdir . '/' . $file; # added by marajax
if(is_file($srcfile)) {
if(is_file($dstfile)) $ow = filemtime($srcfile) - filemtime($dstfile); else $ow = 1;
if($ow > 0) {
if($verbose) echo "Copying '$srcfile' to '$dstfile'...<br />";
if(copy($srcfile, $dstfile)) {
touch($dstfile, filemtime($srcfile)); $num++;
chmod($dstfile, 0777); # added by marajax
$sizetotal = ($sizetotal + filesize($dstfile));
if($verbose) echo "OK\n";
}
else {
echo "Error: File '$srcfile' could not be copied!<br />\n";
$fail++;
$fifail = $fifail.$srcfile.'|';
}
}
}
else if(is_dir($srcfile)) {
$res = explode(',',$ret);
$ret = dir_copy($srcfile, $dstfile, $verbose);
$mod = explode(',',$ret);
$imp = array($res[0] + $mod[0],$mod[1] + $res[1],$mod[2] + $res[2],$mod[3].$res[3]);
$ret = implode(',',$imp);
}
}
}
closedir($curdir);
}
$red = explode(',',$ret);
$ret = ($num + $red[0]).','.(($fail-$offset) + $red[1]).','.($sizetotal + $red[2]).','.$fifail.$red[3];
return $ret;
}
Zuletzt bearbeitet: