Backup systeem
Auteur: ikkedikke - 30 januari 2006 - 19:51 - Gekeurd door: nemesiskoen - Hits: 9161 - Aantal punten: (0 stemmen)
Het is een script om (geautomatiseerd) een backup te maken van een bepaalde map.
het script gaat echter uit van ee bepaalde mappenstructuur:
Het is geschreven voor php 5. om het ook geschikt te maken voor 4 moet je de aanwijzingen volgen in het script.
+systeem
- backup.class.php
+ logs
- main.txt (wordt automatisch gemaakt door het script)
+data
+ mappen met de gebackupte bestanden...
+ gemaakt door het script
+systeem - backup.class.php + logs - main.txt (wordt automatisch gemaakt door het script) +data + mappen met de gebackupte bestanden... + gemaakt door het script
dit script vergelijkt de datum waarop het logbestand voor het laatst gewijzigd is (en dus de laatste backup) met het moment waarop de bestanden in de te backuppen map zijn verandert.
Alle gewijzigde bestanden worden gekopiert.
Een ding om niet te doen:
Zorg er voor dat je nooit een oneindige cirkel krijgt.
De map waarin de data weggeschreven wordt, mag nooit zelf gebackupt worden.
de bestanden die gemaakt worden, voldoen namelijk ook weer aan de voorwaarde om gebackupt te worden.
Nog een ding om niet te doen:
De functie copy leest eerst een bepaalde buffer in voordat het weggeschreven wordt. Ik weet niet hoe groot die buffer is. Het kan zijn dat als je bijv enorme logs of databases gaat backuppen, je een waarschuwing krijgt van onvoldoende visueel geheugen of zoiets. Ik weet er geen oplossing voor.
PS: het is ontworpen voor windows. zo snel mogelijk zal ik een "Task" te download zetten om een "cronjob" te kunnen draaien.
ToDo:
-compressie van de backup
-mogelijkheid om backup terug te zetten. dit moet nu nog met de hand.
|
Code: |
<?php
set_time_limit(0);
class backup
{
private $sSourceDir, $sDestDir, $rLogfile, $iLastBackup,$sMainFolder,
$aExprNeedle = array('%h','%i','%d','%m','%y'),
/* De volgende tekens worden vervangen in de doelmapexpressie:
%h => uur in 24-uurs formaat.
%i => seconde in 2 cijfers
%d => dag van de maand
%m => maand van het jaar
%y => jaartal
*/
$aExprReplace = array();
public $sDestDirExpr;
// PHP 4: "Private" en "public" in "var" veranderen
//* // eerste slash verwijderen voor php4
public function __construct()
/*/
function backup()
//*/
{
$this->aExprReplace = array( date('H') , date('i') , date('d') , date('m') , date('y') );
$this->sDestDirExpr = 'backup%y%m%d%h%i';
$this->sMainFolder = dirname(__FILE__)."\\";
$this->sDataFolder = dirname(dirname(__FILE__))."\\data\\";
}
//* // eerste slash verwijderen voor php4
private function to_path($sDestDirExpr)
/*/
function to_path($sDestDirExpr)
//*/
{
return $this->sDataFolder.str_replace($this->aExprNeedle,$this->aExprReplace,$sDestDirExpr);
}
//* // eerste slash verwijderen voor php4
private function logline($sLog)
/*/
function logline($sLog)
//*/
{
$this->rLogfile = fopen($this->sMainFolder."logs\\main.txt",'a');
fwrite($this->rLogfile,$sLog."\r\n");
fclose($this->rLogfile);
}
//* // eerste slash verwijderen voor php4
private function walktrough($sDir,$sDestDir)
/*/
function walktrough($sDir,$sDestDir)
//*/
{
$aFiles = scandir($sDir);
//
foreach($aFiles as $sFile)
{
if($sFile !='.' && $sFile !='..')
{
if(is_dir($sDir."\\".$sFile))
{
$this->walktrough($sDir."\\".$sFile, $sDestDir."\\".$sFile."\\");
}
else
{
if(filemtime($sDir."\\".$sFile) > $this->iLastBackup)
{
if(!is_dir($sDestDir))
{
mkdir($sDestDir,0777,1);
}
if(copy($sDir."\\".$sFile,$sDestDir."\\".$sFile))
{
$this->logline("+ Opgeslagen: ".$sDir."\\".$sFile);
}
else
{
$this->logline("- NIET opgeslagen: ".$sDir."\\".$sFile);
}
}
}
}
}
}
//* // eerste slash verwijderen voor php4
public function startbackup($sSourceDir)
/*/
function startbackup($sSourceDir)
//*/
{
if(!is_dir($sSourceDir))
{
trigger_error('backup::De opgegeven map bestaat niet!',E_USER_ERROR);
$this->logline('Bronmap bestaat niet, stoppen met backup...');
exit;
}
if(!is_file($this->sMainFolder."logs\\main.txt"))
{
$this->logline("Begin logbestand.\r\nTijd:".date('H:i d-m-Y'));
$this->iLastBackup = 0;
}
else
{
$this->iLastBackup = filemtime ($this->sMainFolder."logs\\main.txt");
}
$this->logline("\r\n\tStart nieuwe backup.\r\nTijd:".date('H:i d-m-Y'));
$this->sDestDir = $this->to_path($this->sDestDirExpr);
if(is_dir($this->sDestDir))
{
$this->logline('Map bestaat al, doorgaan door te overschrijven.');
}
else
{
mkdir($this->sDestDir,0777) or die($this->sDestDir);
}
$this->walktrough($sSourceDir,$this->sDestDir);
}
}
$cBackup = new backup;
$cBackup->sDestDirExpr = '%y-%m-%d-%h-%i-afbeeldingen';
// zie boven in script voor speciale tekens in de bestandsnaam
$cBackup->startbackup("D:\\Documenten en Settings\\Ik\\Mijn documenten\\Mijn afbeeldingen");
?>
<?php class backup { private $sSourceDir, $sDestDir, $rLogfile, $iLastBackup,$sMainFolder, $aExprNeedle = array('%h','%i','%d','%m','%y'), /* De volgende tekens worden vervangen in de doelmapexpressie: %h => uur in 24-uurs formaat. %i => seconde in 2 cijfers %d => dag van de maand %m => maand van het jaar %y => jaartal */ public $sDestDirExpr; // PHP 4: "Private" en "public" in "var" veranderen //* // eerste slash verwijderen voor php4 public function __construct() /*/ function backup() //*/ { $this->sDestDirExpr = 'backup%y%m%d%h%i'; $this->sMainFolder = dirname(__FILE__)."\\"; $this->sDataFolder = dirname(dirname(__FILE__))."\\data\\"; } //* // eerste slash verwijderen voor php4 private function to_path($sDestDirExpr) /*/ function to_path($sDestDirExpr) //*/ { return $this->sDataFolder.str_replace($this->aExprNeedle,$this->aExprReplace,$sDestDirExpr); } //* // eerste slash verwijderen voor php4 private function logline($sLog) /*/ function logline($sLog) //*/ { $this->rLogfile = fopen($this->sMainFolder."logs\\main.txt",'a'); fwrite($this->rLogfile,$sLog."\r\n"); fclose($this->rLogfile); } //* // eerste slash verwijderen voor php4 private function walktrough($sDir,$sDestDir) /*/ function walktrough($sDir,$sDestDir) //*/ { $aFiles = scandir($sDir); // foreach($aFiles as $sFile) { if($sFile !='.' && $sFile !='..') { if(is_dir($sDir."\\".$sFile)) { $this->walktrough($sDir."\\".$sFile, $sDestDir."\\".$sFile."\\"); } else { if(filemtime($sDir."\\".$sFile) > $this->iLastBackup) { if(!is_dir($sDestDir)) { mkdir($sDestDir,0777,1); } if(copy($sDir."\\".$sFile,$sDestDir."\\".$sFile)) { $this->logline("+ Opgeslagen: ".$sDir."\\".$sFile); } else { $this->logline("- NIET opgeslagen: ".$sDir."\\".$sFile); } } } } } } //* // eerste slash verwijderen voor php4 public function startbackup($sSourceDir) /*/ function startbackup($sSourceDir) //*/ { if(!is_dir($sSourceDir)) { trigger_error('backup::De opgegeven map bestaat niet!',E_USER_ERROR); $this->logline('Bronmap bestaat niet, stoppen met backup...'); exit; } if(!is_file($this->sMainFolder."logs\\main.txt")) { $this->logline("Begin logbestand.\r\nTijd:".date('H:i d-m-Y')); $this->iLastBackup = 0; } else { $this->iLastBackup = filemtime ($this->sMainFolder."logs\\main.txt"); } $this->logline("\r\n\tStart nieuwe backup.\r\nTijd:".date('H:i d-m-Y')); $this->sDestDir = $this->to_path($this->sDestDirExpr); if(is_dir($this->sDestDir)) { $this->logline('Map bestaat al, doorgaan door te overschrijven.'); } else { mkdir($this->sDestDir,0777) or die($this->sDestDir); } $this->walktrough($sSourceDir,$this->sDestDir); } } $cBackup = new backup; $cBackup->sDestDirExpr = '%y-%m-%d-%h-%i-afbeeldingen'; // zie boven in script voor speciale tekens in de bestandsnaam $cBackup->startbackup("D:\\Documenten en Settings\\Ik\\Mijn documenten\\Mijn afbeeldingen"); ?>
Download code (.txt)
|
|
Stemmen |
Niet ingelogd. |
|