Du bist nicht angemeldet.

Darcline

Fortgeschrittener

(23)

  • »Darcline« ist der Autor dieses Themas

Beiträge: 207

Wohnort: Krefeld

Beruf: Schüler, (Eventuell Vermessungstechniker)

Renommeemodifikator: 4

  • Private Nachricht senden

1

13.02.2012, 16:49

datenbackup script

Hallo ich arbeite grade an einem datenbackup script leider kriege ich es nicht so ganz hin wie ich es mir wünsche
<?php $alledateien = scandir('../'); //Ordner "files" auslesen foreach ($alledateien as $datei) { // Ausgabeschleife $zip = new ZipArchive; $resource = $zip->open( 'backup.'. date('l d-m-y') .'||'. date('H:i:s') .'.zip', ZipArchive::CREATE ); if ($resource === TRUE) { $zip->addFromString( 'info.txt', 'Backupdatei falls fehler während der Installation auftreten.' ); $zip->addFile( ''. $datei .'' ); $zip->addEmptyDir( ''. $datei .''); $zip->close(); } }; ?>

PHP-Quellcode

 1 
 2 
 3 
 4 
 5 
 6 
 7 
 8 
 9 
 10 
 11 
 12 
 13 
 14 
        	<?php
$alledateien = scandir('../'); //Ordner "files" auslesen
foreach ($alledateien as $datei) { // Ausgabeschleife
$zip = new ZipArchive;
$resource = $zip->open( 'backup.'. date('l d-m-y') .'||'. date('H:i:s') .'.zip', ZipArchive::CREATE );
if ($resource === TRUE)
{
	$zip->addFromString( 'info.txt', 'Backupdatei falls fehler während der Installation auftreten.' );
	$zip->addFile( ''. $datei .'' );
	$zip->addEmptyDir( ''. $datei .'');
	$zip->close();
}
};
?>


also folgendermassen es wird ein verzeichniss durchsucht funktiopniert wunderbar , der pfad muss allerdings so bleiben,

dann wird eine zip mit dem aktuellen datum und uhrzeit angelegt so jeztt zu dem prroblem,
alle dateien die in dem ../ verzeichniss sind werden wunderbar in die zip geschrieben, aber verzeichnisse und unterordner und die dateien die sich dort drin befinden leider nicht :/ wie mache ich das jeztt noch das sich auch diese darein schrieben ?

Zusätzlich habe ich noch ein problem, unzwar schriebn sich in die zip 2 leere dateien mit erien eine davon eißt . und die andere .. wie mache ich das dass die nicht mit reingeschirbenwerden ?

hoffe ihr könnt mir da helfen weiß leider nicht mehr weiter
Besuche mich unter http://pyrosoftshare.co.de, wir helfen, bei sicherheit und bieten tolle Produkte an.

Wir freuen uns auf deine Besuch

Thomas2500

Administrator

(23)

Beiträge: 767

Wohnort: 2500, Siegenfeld

Beruf: HTBLuVA Schüler

Renommeemodifikator: 7

  • Private Nachricht senden

2

15.02.2012, 14:42

Ich empfehle die tar Funktion des Systems (bei Linux Basis).
Geht um einiges schneller und übernimmt ebenfalls die Dateiberechtigungen. Allerdings brauchst du dafür Zugriff auf die Funktion system()
MfG Thomas2500 - For science, you monster

Darcline

Fortgeschrittener

(23)

  • »Darcline« ist der Autor dieses Themas

Beiträge: 207

Wohnort: Krefeld

Beruf: Schüler, (Eventuell Vermessungstechniker)

Renommeemodifikator: 4

  • Private Nachricht senden

3

15.02.2012, 15:51

ahm nicht so gut wiel das später mal eine öffentliche software ist :/

und mit tar hab ich leider keinerlei erfahrungen,
Besuche mich unter http://pyrosoftshare.co.de, wir helfen, bei sicherheit und bieten tolle Produkte an.

Wir freuen uns auf deine Besuch

4

18.02.2012, 12:53

Es gibt auch PHP-Module für GZIP-Komprimierung:
PHP: gzencode - Manual

Bzw. um in eine Datei zu schreiben:
PHP: gzopen - Manual

PHP: gzwrite - Manual

PHP: gzclose - Manual

(allerdings keine für TAR-Archivierung, also immer nur einzelne Dateien)

Allerdings gibt es eigentlich auch nichts gegen das Modul mit der Klasse ZipArchive, es ist genauso ein PHP-Modul, also in C(++) geschrieben und sollte nicht oder kaum langsamer sein, als ein normales Programm dafür.

Um alle Dateien samt Unterverzeichnissen auszulesen, macht man das am einfachsten rekursiv, dazu einfach die Schleife in eine Funktion (mit Parametern für Verzeichnis und in deinem Fall das geöffnete (!) ZIP-Archiv), erst prüfen auf '.' oder '..' und wenn es eins davon ist, continue, ansonsten mit is_dir prüfen, ob es ein Verzeichnis ist, wenn ja die gleiche Funktion mit diesem Verzeichnis aufrufen, und wenn nein einfach die aktuelle Datei in das ZIP-Archiv hinzufügen.

Der Funktionsaufruf sollte dann ungefähr so aussehen (du solltest nicht jedes mal die Datei neu öffnen und schließen):
$zip = new ZipArchive(); $resource = $zip->open( 'backup.'. date('l d-m-y') .'||'. date('H:i:s') .'.zip', ZipArchive::CREATE ); if ($resource === TRUE) { addRecursive($zip, '../'); // Funktionsaufruf mit dem hinzuzufügenden Verzeichnis $zip->close(); }

PHP-Quellcode

 1 
 2 
 3 
 4 
 5 
 6 
 7 
$zip = new ZipArchive();
$resource = $zip->open( 'backup.'. date('l d-m-y') .'||'. date('H:i:s') .'.zip', ZipArchive::CREATE );
if ($resource === TRUE)
{
	addRecursive($zip, '../'); // Funktionsaufruf mit dem hinzuzufügenden Verzeichnis
	$zip->close();
}


Übrigens solltest du aufpassen, wo du diese ZIP-Datei hinspeicherst, wenn du am Ende ../ durchsuchst, sonst fügst du in jedem neuen Archiv das alte Archiv auch mit dazu.

Darcline

Fortgeschrittener

(23)

  • »Darcline« ist der Autor dieses Themas

Beiträge: 207

Wohnort: Krefeld

Beruf: Schüler, (Eventuell Vermessungstechniker)

Renommeemodifikator: 4

  • Private Nachricht senden

5

23.02.2012, 14:29

hallo, habe dien vorshclag mit gzip angenommen alleridngs funktionierts nicht :/

hir mal den aktuellen quellcode, zudem habe ich ein script gefunden was es ermöglicht, verzeichnisse, unterverzeichnisse, und die darin enthaltenen dateien aufzulisten.

habe schon ein wenig verushct mit gzip zu abreiten ertsellen klappt wunderbar aber rienschrieben nicht, es wird eine datei riengeschireben die ist dann aber entweder leer oder dort stehe 1 oder ../modules :/

<?php function show_dir( $dir, $pos=2 ) { if ( $pos == 2 ) { echo "<hr /><pre>"; } $handle = @opendir( $dir ); if ( is_resource( $handle ) ) { while ( ( $file = readdir( $handle ) ) !== false ) { if ( preg_match( '~^\.{1,2}$~', $file ) ) { continue; } if ( is_dir( $dir.$file ) ) { printf( "% ".$pos."s <b>%s</b>\n", '|-', $file ); show_dir( $dir.$file.'/', $pos + 3 ); $gz = gzopen('../adm/functions/update-install/install/backup/backup.'. date('l d-m-y') .'.gz','w9'); $data = implode("", file($dir.$file)); $gzdata = gzencode($data, 9); $fp = fopen('../adm/functions/update-install/install/backup/backup.'. date('l d-m-y') .'.gz', 'w'); gzwrite($gz, $data); gzclose($gz); } else { printf( "% ".$pos."s %s\n", '|-', $file ); } } closedir($handle); } if ( $pos == 2 ) { echo "</pre><hr />"; } } show_dir( '../' ); ?>

PHP-Quellcode

 1 
 2 
 3 
 4 
 5 
 6 
 7 
 8 
 9 
 10 
 11 
 12 
 13 
 14 
 15 
 16 
 17 
 18 
 19 
 20 
 21 
 22 
 23 
 24 
 25 
 26 
 27 
 28 
 29 
 30 
 31 
 32 
 33 
 34 
 35 
 36 
 37 
 38 
 39 
<?php
 
function show_dir( $dir, $pos=2 )
{
	if ( $pos == 2 ) {
    	echo "<hr /><pre>";
	}
 
	$handle = @opendir( $dir );
	if ( is_resource( $handle ) ) {
    	while ( ( $file = readdir( $handle ) ) !== false ) {
        	if ( preg_match( '~^\.{1,2}$~', $file ) ) {
            	continue;
        	}
 
        	if ( is_dir( $dir.$file ) ) {
            	printf( "% ".$pos."s <b>%s</b>\n", '|-', $file );
            	show_dir( $dir.$file.'/', $pos + 3 );
$gz = gzopen('../adm/functions/update-install/install/backup/backup.'. date('l d-m-y') .'.gz','w9');
$data = implode("", file($dir.$file));
$gzdata = gzencode($data, 9);
$fp = fopen('../adm/functions/update-install/install/backup/backup.'. date('l d-m-y') .'.gz', 'w');
gzwrite($gz, $data);
gzclose($gz);
        	} else {
            	printf( "% ".$pos."s %s\n", '|-', $file );
        	}
    	}
    	closedir($handle);
	}
 
	if ( $pos == 2 ) {
    	echo "</pre><hr />";
	}
}
 
show_dir( '../' );
 
?>


hoffe ihr könnt mir damit helfen
Besuche mich unter http://pyrosoftshare.co.de, wir helfen, bei sicherheit und bieten tolle Produkte an.

Wir freuen uns auf deine Besuch

6

26.02.2012, 11:42

Genau so eine Funktion meinte ich, nur kannst du mit GZIP wie gesagt nur eine Datei komprimieren.
Du solltest also am besten bei der Klasse ZipArchive bleiben, und es dann in etwa so machen:

<?php function show_dir( $dir, $zip, $zip_dir='' ) { $handle = opendir( $dir ); if ( !is_resource( $handle ) ) return; while ( ( $file = readdir( $handle ) ) !== false ) { if ( $file == '.' || $file == '..' ) continue; $df = $dir . $file; if ( is_dir( $df ) ) { $zip->addEmptyDir($zip_dir . $file); // um zu wissen, in welchem Verzeichnis relativ zum zu durchsuchenden Verzeichnis // wir uns befinden, das aktuelle Verzeichnis im ZIP-Archiv mit übergeben show_dir( $df.'/', $zip, $zip_dir . '/' . $file ); } else { $zip->addFile($df, $zip_dir . $file); } } closedir($handle); } $zip = new ZipArchive(); $resource = $zip->open( 'backup.'. date('l d-m-y') .'||'. date('H:i:s') .'.zip', ZipArchive::CREATE ); if ($resource === TRUE) { // sonstige Dateien hinzufügen // ... show_dir( '../', $zip); $zip->close(); } ?>

PHP-Quellcode

 1 
 2 
 3 
 4 
 5 
 6 
 7 
 8 
 9 
 10 
 11 
 12 
 13 
 14 
 15 
 16 
 17 
 18 
 19 
 20 
 21 
 22 
 23 
 24 
 25 
 26 
 27 
 28 
 29 
 30 
 31 
 32 
 33 
 34 
 35 
 36 
 37 
<?php
 
function show_dir( $dir, $zip, $zip_dir='' )
{
	$handle = opendir( $dir );
	if ( !is_resource( $handle ) ) return;
	while ( ( $file = readdir( $handle ) ) !== false )
	{
		if ( $file == '.' || $file == '..' ) continue;
 
		$df = $dir . $file;
		if ( is_dir( $df ) )
		{
			$zip->addEmptyDir($zip_dir . $file);
			// um zu wissen, in welchem Verzeichnis relativ zum zu durchsuchenden Verzeichnis
			// wir uns befinden, das aktuelle Verzeichnis im ZIP-Archiv mit übergeben
			show_dir( $df.'/', $zip, $zip_dir . '/' . $file );
		}
		else
		{
			$zip->addFile($df, $zip_dir . $file);
		}
	}
	closedir($handle);
}
 
$zip = new ZipArchive();
$resource = $zip->open( 'backup.'. date('l d-m-y') .'||'. date('H:i:s') .'.zip', ZipArchive::CREATE );
if ($resource === TRUE)
{
	// sonstige Dateien hinzufügen
	// ...
	show_dir( '../', $zip);
	$zip->close();
}
 
?>

Ist ungetestet, aber so in etwa sollte es gehen.

Darcline

Fortgeschrittener

(23)

  • »Darcline« ist der Autor dieses Themas

Beiträge: 207

Wohnort: Krefeld

Beruf: Schüler, (Eventuell Vermessungstechniker)

Renommeemodifikator: 4

  • Private Nachricht senden

7

02.03.2012, 21:23

ok danke die zip wird wunderbar geschireben aber leider schriebt er alles völlig durcheinander :S

sieht z.b. so aus also das original

adm/function/system/actions

in zip :

/adm
/admfunctions
/admfunctionssystem
/admfunctionssystemactions

geht ich auf einene dieser ornder ist alles ganz normal weiter geschrieben
Besuche mich unter http://pyrosoftshare.co.de, wir helfen, bei sicherheit und bieten tolle Produkte an.

Wir freuen uns auf deine Besuch

8

03.03.2012, 13:32

Ja, da habe ich wohl die Slashes vergessen:
[...] $zip->addEmptyDir($zip_dir . '/' . $file); [...] $zip->addFile($df, $zip_dir . '/' . $file); [...]

PHP-Quellcode

 1 
 2 
 3 
 4 
 5 
[...]
$zip->addEmptyDir($zip_dir . '/' . $file);
[...]
$zip->addFile($df, $zip_dir . '/' . $file);
[...]

Darcline

Fortgeschrittener

(23)

  • »Darcline« ist der Autor dieses Themas

Beiträge: 207

Wohnort: Krefeld

Beruf: Schüler, (Eventuell Vermessungstechniker)

Renommeemodifikator: 4

  • Private Nachricht senden

9

03.03.2012, 17:30

ok danke funktioniert jetzt wunderbar ;)

entlich kann ich mal wieder schnell weiterarbeiten hoffe das bleibt so :rolleyes:
Besuche mich unter http://pyrosoftshare.co.de, wir helfen, bei sicherheit und bieten tolle Produkte an.

Wir freuen uns auf deine Besuch

Ähnliche Themen