login  Naam:   Wachtwoord: 
Registreer je!
 Scripts:

Scripts > PHP > Grote systemen > Backup systeem

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.
  1. +systeem
  2. - backup.class.php
  3. + logs
  4. - main.txt (wordt automatisch gemaakt door het script)
  5. +data
  6. + mappen met de gebackupte bestanden...
  7. + 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:
  1. <?php
  2. class backup
  3. {
  4. private $sSourceDir, $sDestDir, $rLogfile, $iLastBackup,$sMainFolder,
  5. $aExprNeedle = array('%h','%i','%d','%m','%y'),
  6. /* De volgende tekens worden vervangen in de doelmapexpressie:
  7. %h => uur in 24-uurs formaat.
  8. %i => seconde in 2 cijfers
  9. %d => dag van de maand
  10. %m => maand van het jaar
  11. %y => jaartal
  12. */
  13. $aExprReplace = array();
  14. public $sDestDirExpr;
  15. // PHP 4: "Private" en "public" in "var" veranderen
  16.  
  17. //* // eerste slash verwijderen voor php4
  18. public function __construct()
  19. /*/
  20. function backup()
  21. //*/
  22. {
  23. $this->aExprReplace = array( date('H') , date('i') , date('d') , date('m') , date('y') );
  24. $this->sDestDirExpr = 'backup%y%m%d%h%i';
  25. $this->sMainFolder = dirname(__FILE__)."\\";
  26. $this->sDataFolder = dirname(dirname(__FILE__))."\\data\\";
  27. }
  28. //* // eerste slash verwijderen voor php4
  29. private function to_path($sDestDirExpr)
  30. /*/
  31. function to_path($sDestDirExpr)
  32. //*/
  33. {
  34. return $this->sDataFolder.str_replace($this->aExprNeedle,$this->aExprReplace,$sDestDirExpr);
  35. }
  36. //* // eerste slash verwijderen voor php4
  37. private function logline($sLog)
  38. /*/
  39. function logline($sLog)
  40. //*/
  41. {
  42. $this->rLogfile = fopen($this->sMainFolder."logs\\main.txt",'a');
  43. fwrite($this->rLogfile,$sLog."\r\n");
  44. fclose($this->rLogfile);
  45. }
  46. //* // eerste slash verwijderen voor php4
  47. private function walktrough($sDir,$sDestDir)
  48. /*/
  49. function walktrough($sDir,$sDestDir)
  50. //*/
  51. {
  52. $aFiles = scandir($sDir);
  53. //
  54. foreach($aFiles as $sFile)
  55. {
  56. if($sFile !='.' && $sFile !='..')
  57. {
  58. if(is_dir($sDir."\\".$sFile))
  59. {
  60. $this->walktrough($sDir."\\".$sFile, $sDestDir."\\".$sFile."\\");
  61. }
  62. else
  63. {
  64. if(filemtime($sDir."\\".$sFile) > $this->iLastBackup)
  65. {
  66. if(!is_dir($sDestDir))
  67. {
  68. mkdir($sDestDir,0777,1);
  69. }
  70. if(copy($sDir."\\".$sFile,$sDestDir."\\".$sFile))
  71. {
  72. $this->logline("+ Opgeslagen: ".$sDir."\\".$sFile);
  73. }
  74. else
  75. {
  76. $this->logline("- NIET opgeslagen: ".$sDir."\\".$sFile);
  77. }
  78. }
  79. }
  80. }
  81. }
  82. }
  83. //* // eerste slash verwijderen voor php4
  84. public function startbackup($sSourceDir)
  85. /*/
  86. function startbackup($sSourceDir)
  87. //*/
  88. {
  89. if(!is_dir($sSourceDir))
  90. {
  91. trigger_error('backup::De opgegeven map bestaat niet!',E_USER_ERROR);
  92. $this->logline('Bronmap bestaat niet, stoppen met backup...');
  93. exit;
  94. }
  95. if(!is_file($this->sMainFolder."logs\\main.txt"))
  96. {
  97. $this->logline("Begin logbestand.\r\nTijd:".date('H:i d-m-Y'));
  98. $this->iLastBackup = 0;
  99. }
  100. else
  101. {
  102. $this->iLastBackup = filemtime ($this->sMainFolder."logs\\main.txt");
  103. }
  104. $this->logline("\r\n\tStart nieuwe backup.\r\nTijd:".date('H:i d-m-Y'));
  105. $this->sDestDir = $this->to_path($this->sDestDirExpr);
  106. if(is_dir($this->sDestDir))
  107. {
  108. $this->logline('Map bestaat al, doorgaan door te overschrijven.');
  109. }
  110. else
  111. {
  112. mkdir($this->sDestDir,0777) or die($this->sDestDir);
  113. }
  114. $this->walktrough($sSourceDir,$this->sDestDir);
  115. }
  116. }
  117. $cBackup = new backup;
  118. $cBackup->sDestDirExpr = '%y-%m-%d-%h-%i-afbeeldingen';
  119. // zie boven in script voor speciale tekens in de bestandsnaam
  120. $cBackup->startbackup("D:\\Documenten en Settings\\Ik\\Mijn documenten\\Mijn afbeeldingen");
  121. ?>
Download code! Download code (.txt)

 Stemmen
Niet ingelogd.

 Reacties
Post een reactie
Lees de reacties (10)
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.033s