| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120 | <?phpclass CopyController{	public static function Run ($argv)	{		if (count($argv) < 3) die();		$copyCtrl = new CopyController();		$tol = (count($argv) > 3) ? $argv[3] : 20;		$copyCtrl->Copy($argv[1], $argv[2], $tol);	}	public function Copy ($source, $target, $tolerance = 20, $timeout = 300, $retry = 20)	{		if (!is_dir($source)) {			$source = dirname($source);		}		$dir = dir($source);		$start = strtotime("now");		$oldest = $start - ($tolerance * 60 * 60);		for ($i = 0; $i < $retry; $i++) {			if ($this->anyFileYoungerThan($source, $oldest) && $this->AllFilesOlderThan($source, strtotime("-10 min"))) {				$mins = floor((strtotime("now") - $start) / 60);				if ($mins > 1) {					echo "* Wartezeit: {$mins} Min.\r\n";				}				break;			}			if ($i == 0) {				if (!$this->anyFileYoungerThan($source, $oldest)) {					echo "  Es liegen noch keine aktuellen Daten vor\r\n";				} else {					echo "  Der Export ist noch nicht vollstaendig\r\n";				}			}			echo "  Warte 5 Minuten...\r\n";			sleep($timeout);		}		if (!$this->anyFileYoungerThan($source, $oldest)) {			echo "(CR0004) Alle Dateien sind veraltet. Prozess wurde abgebrochen.\r\n";			exit(5);		}		while ($txtFile = $dir->read()) {			if (!preg_match('/\.txt$/i', $txtFile)) {				continue;			}			$sourceFile = $source . "\\" . $txtFile;			$targetFile = $target . "\\" . $txtFile;			$modified = date("d.m.Y H:i", filemtime($sourceFile));			if (filemtime($sourceFile) >= $oldest) {				$unlocker = exec("cmd.exe /c unlocker.bat {$targetFile}");				if (copy($sourceFile, $targetFile)) {					echo "  {$txtFile} ({$modified})\r\n";					$this->Replace($targetFile);				} else {					echo $unlocker . "\r\n";					echo "(CR0002) Kopieren von '{$sourceFile}' fehlgeschlagen.\r\n";				}			} else {				echo "(CR0005) Datei '{$sourceFile}' ist nicht aktuell. Stand: {$modified}\r\n";			}		}	}	public function AllFilesOlderThan ($dirname, $timestamp)	{		$dir = dir($dirname);		while ($txtFile = $dir->read()) {			if (!preg_match('/\.txt$/i', $txtFile)) {				continue;			}			if (filemtime($dirname . "\\" . $txtFile) > $timestamp) {				return false;			}		}		return true;	}	public function AnyFileYoungerThan ($dirname, $timestamp)	{		$dir = dir($dirname);		while ($txtFile = $dir->read()) {			if (!preg_match('/\.txt$/i', $txtFile)) {				continue;			}			if (filemtime($dirname . "\\" . $txtFile) > $timestamp) {				return true;			}		}		return false;	}	public function Replace ($filename)	{		if (!isset($filename) || !file_exists($filename)) {			return "(CR0003) Die Datei '{$filename}' ist nicht vorhanden.\r\n";		}		$tempfile = $filename . ".temp";		@unlink($tempfile);		if (!rename($filename, $tempfile)) return "(CR0007) Die Datei '{$filename}' ist schreibgeschuetzt.\r\n";		$readHandle = fopen($tempfile, "r");		$writeHandle = fopen($filename, "w+");				if (!$readHandle) return "(CR0008) Die temporaere Datei '{$tempfile}' ist nicht vorhanden.\r\n";		if (!$writeHandle) return "(CR0009) Die Datei '{$filename}' ist schreibgeschuetzt.\r\n";				while (!feof($readHandle)) {			fwrite($writeHandle, str_replace('"', "'", fgets($readHandle)));		}		fclose($readHandle);		fclose($writeHandle);		unlink($tempfile);		return true;	}}
 |