<?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");
?> 