Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

PHP-Script -Backup über FTP

Frage Entwicklung PHP

Mitglied: Niranda

Niranda (Level 1) - Jetzt verbinden

30.04.2010, aktualisiert 02.05.2010, 4693 Aufrufe, 3 Kommentare

- Verdindung zum FTP-Server wird erfolgreich aufgebaut
- Dateien werden erfolgreich eingelesen
- Ziel-pfad wird erfolgreich zusammengebastelt
-> Upload funktioniert nicht (keine Fehlermeldung, nur ein Warning)

Huhu liebe PHP-Freaks und was sich hier noch so alles tummelt :P

Ich hab mir ein Script gebastelt, welches ein lokales Verzeichnis komplett rekursiv einließt und dieses auf einen FTP-Server hochladen soll. Sozusagen als Backup, die Verzeichnisstruktur soll dann logischer Weise auf dem FTP-Server gleich abgebildet sein.

Es ist vielleicht ein bisschen verwirrend und nicht optimal (z.B. Zeichen ersetzen anstatt danach zu exploden usw.), aber seht selbst:

01.
<?php 
02.
 
03.
function dir_rekursiv($verzeichnis) {  
04.
	$handle = opendir($verzeichnis); 
05.
 
06.
	while ($datei = readdir($handle)) {  
07.
		if ($datei != "." && $datei != "..") {  
08.
			 
09.
			if (is_dir($verzeichnis.$datei)) {				// Wenn Verzeichniseintrag ein Verzeichnis ist 
10.
				$arr =dir_rekursiv($verzeichnis.$datei.'\\');		// Erneuter Funktionsaufruf, um das aktuelle Verzeichnis auszulesen 
11.
				 
12.
				foreach ($arr as $key => $value) { 
13.
					$all[] = $value
14.
15.
16.
			else {											// Wenn Verzeichnis-Eintrag eine Datei ist, diese ausgeben 
17.
				$all[] = $verzeichnis.$datei
18.
			}  
19.
20.
21.
	closedir($handle); 
22.
	return $all
23.
}  
24.
 
25.
 
26.
 
27.
/* ********************************* */ 
28.
	$ftp_server =	"ftp.server.de"
29.
	$benutzername =	"user"
30.
	$passwort =		"pwd"
31.
	 
32.
	$quelle =		"D:\\sys\\backup\\"; // am ende muss \\ stehen! 
33.
	$ziel =			"/httpdocs/backup"; // unsicher ob Slash oder backslash - am Ende KEIN Back-/Slash 
34.
/* ********************************* */ 
35.
 
36.
$fehler = ""
37.
$next = false; 
38.
$n = "\n"
39.
$quellcount = strlen($quelle); 
40.
 
41.
  
42.
$connection_id = ftp_connect($ftp_server); 
43.
  
44.
$login_result = ftp_login($connection_id, $benutzername, $passwort); 
45.
ftp_pasv($connection_id, true); 
46.
 
47.
if ((!$connection_id) || (!$login_result)) { 
48.
	$fehler = $fehler.$n."Ftp-Verbindung konnte nicht hergestellt werden!"
49.
	$fehler = $fehler.$n."Verbindung mit [".$ftp_server."] als Benutzer [".$benutzername."] nicht möglich!";	 
50.
	$next = false; 
51.
52.
else
53.
	$fehler = $fehler.$n."Verbindung hergestellt mit [".$ftp_server."] als Benutzer [".$benutzername."]".$n
54.
	$next = true; 
55.
56.
 
57.
if ($next) { 
58.
	$fullpaths = dir_rekursiv($quelle);			// Verzeichnis komplett einlesen 
59.
 
60.
	foreach ($fullpaths as $key => $value) { 
61.
		$nziel = substr($value, $quellcount); // Ab hier wird das \\ zum / 
62.
		$aziel = explode("\\", $nziel); 
63.
		$kziel = ""
64.
		$rziel = ""
65.
		 
66.
		for ($i=0; $i < count($aziel); $i++) { 
67.
			$kziel = $kziel."/".$aziel[$i]; 
68.
69.
		$rziel = $ziel.$rziel.$kziel."\n"
70.
echo $rziel."\n";						// Testausgabe des  
71.
		$upload = ftp_put($connection_id, $rziel, $value, FTP_ASCII); 
72.
 
73.
		if (!$upload) { 
74.
			$fehler = $fehler.$n." - Fehler -> upload"
75.
76.
77.
78.
 
79.
ftp_quit($connection_id); 
80.
 
81.
echo $fehler
82.
 
83.
?> 
Ich habe jetzt schon mehrere Stunden mich dran probiert. Habe die Zielpfade umgeschrieben, das komplette Verzeichnis manuell abgebildet auf dem FTP-Server... ich weiß jetzt nicht mehr weiter.
Die Dateien werden nicht hochgeladen und eine Fehlermeldung bleibt ebenfalls aus. Nur ein Warning kommt durch:
"PHP Warning: ftp_put(): PORT command successful. in D:\ftp.php on line 73"

Seht Ihr vielleicht etwas, was ich übersehen hab(en) könnte? :S
Dankeschön und ein schönes WE euch allen!

Nira
Mitglied: Snowman25
30.04.2010 um 16:37 Uhr
Hallo Niranda Sandra Laura Monique,

$upload = ftp_put($connection_id, $rziel, $value, FTP_ASCII);

schau mal hier: http://www.php.net/manual/en/function.ftp-put.php#89986
könnte es daran liegen?
Gruß
Snow
Bitte warten ..
Mitglied: Niranda
30.04.2010 um 17:02 Uhr
Hey, danke schön für deine schnelle Antwort

Es gab zwei Probleme:
Zum einen, was du geschrieben hast bzgl ASCII, es ist BINARY zu wählen.
Und etwas weiter oben hatte ich folgendes stehen:
$rziel = $ziel.$rziel.$kziel."\n";

Das ."\n" muss natürlich raus ;)

Es gibt's nur noch ein Problem:
Das Script muss Ordner vorher selbstständig erstellen, falls sie nicht existieren - ansonsten wird nix hochgeladen.
Bitte warten ..
Mitglied: Niranda
30.04.2010 um 17:41 Uhr
Der Vollständigkeit halber hier das lauffähige Script:
Dateien werden auf den FTP Server geladen.
Sollte ein Ordner nicht existieren, so wird dieser automatisch angelegt und gefüllt.

01.
<?php 
02.
 
03.
/* 
04.
 * Author: Niranda 
05.
 * Website: www.NiraPhone.de 
06.
 * Only with this Headline ffa 
07.
 */ 
08.
 
09.
function dir_rekursiv($verzeichnis) {  
10.
	$handle = opendir($verzeichnis); 
11.
 
12.
	while ($datei = readdir($handle)) {  
13.
		if ($datei != "." && $datei != "..") {  
14.
			 
15.
			if (is_dir($verzeichnis.$datei)) {				// Wenn Verzeichniseintrag ein Verzeichnis ist 
16.
				$arr =dir_rekursiv($verzeichnis.$datei.'\\');		// Erneuter Funktionsaufruf, um das aktuelle Verzeichnis auszulesen 
17.
				 
18.
				foreach ($arr as $key => $value) { 
19.
					$all[] = $value
20.
21.
22.
			else {											// Wenn Verzeichnis-Eintrag eine Datei ist, diese ausgeben 
23.
				$all[] = $verzeichnis.$datei
24.
			}  
25.
26.
27.
	closedir($handle); 
28.
	return $all
29.
}  
30.
 
31.
 
32.
/* ============================================== *
33.
/* ============================================== *
34.
 
35.
/* ********************************* */ 
36.
	$ftp_server =	"ftp.server.de"
37.
	$benutzername =	"user"
38.
	$passwort =		"pwd"
39.
	 
40.
	$quelle =		"D:\\roteiro\\kdb_imp\\backup\\";	// Am Ende muss \\ stehen 
41.
	$ziel =			"/httpdocs/backup";					// Am Ende darf kein / sein 
42.
/* ********************************* */ 
43.
 
44.
$fehler = ""
45.
$next = false; 
46.
$n = "\n"
47.
$quellcount = strlen($quelle); 
48.
 
49.
  
50.
$connection_id = ftp_connect($ftp_server); 
51.
  
52.
$login_result = ftp_login($connection_id, $benutzername, $passwort); 
53.
ftp_pasv($connection_id, false);					// true statt false => passiv-modus an 
54.
 
55.
if ((!$connection_id) || (!$login_result)) { 
56.
	$fehler = $fehler.$n."Ftp-Verbindung konnte nicht hergestellt werden!"
57.
	$fehler = $fehler.$n."Verbindung mit [".$ftp_server."] als Benutzer [".$benutzername."] nicht möglich!";	 
58.
	$next = false; 
59.
60.
else
61.
	$fehler = $fehler.$n."Verbindung hergestellt mit [".$ftp_server."] als Benutzer [".$benutzername."]".$n
62.
	$next = true; 
63.
64.
 
65.
if ($next) { 
66.
	$fullpaths = dir_rekursiv($quelle);			// Verzeichnis komplett einlesen 
67.
 
68.
	foreach ($fullpaths as $key => $value) { 
69.
		$nziel = substr($value, $quellcount); 
70.
		$aziel = explode("\\", $nziel); 
71.
		$kziel = ""
72.
		$dir = ""
73.
		 
74.
		for ($i=0; $i < count($aziel); $i++) { 
75.
			$kziel = $kziel."/".$aziel[$i]; 
76.
77.
		$rziel = $ziel.$kziel
78.
		 
79.
		@$upload = ftp_put($connection_id, $rziel, $value, FTP_BINARY); 
80.
		 
81.
		if (!$upload) { 
82.
		for ($j=0; $j < count($aziel)-1; $j++) { 
83.
			$dir = $dir."/".$aziel[$j]; 
84.
85.
		$dir = $ziel.$dir
86.
		 
87.
		ftp_mkdir($connection_id, $dir); 
88.
		$upload = ftp_put($connection_id, $rziel, $value, FTP_BINARY); 
89.
			if (!$upload) { 
90.
				$fehler = $fehler.$n.$rziel." - Fehler -> upload"
91.
92.
93.
94.
95.
 
96.
ftp_quit($connection_id); 
97.
 
98.
echo $fehler
99.
 
100.
?> 
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (21)

Frage von Xaero1982 zum Thema Microsoft ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Windows Update
Treiberinstallation durch Windows Update läßt sich nicht verhindern (17)

Frage von liquidbase zum Thema Windows Update ...