1.1k Aufrufe
Gefragt in Skripte(PHP,ASP,Perl...) von timoxy Mitglied (133 Punkte)
hallo liebe supporter,

ich habe ein Problem mit einem Script von mir.

der Gedanken hinter diesem script ist, alle daten eines servers mittels php ftp auf einen anderen zu kopieren und somit per cronjob ein backup zu machen. das script läuft einwandfrei.

jedoch werden meine bilder (jpg/png/gif) nicht richtig übertragen, sie habend die richtige kb größe jedoch ist jedes bild transparent. (also ohne inhalt)

hier mein code:

//Sicherungsordner anlegen
$conn_id = ftp_connect($ftp_server);
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
ftp_chdir($conn_id, $ftp_verz);
ftp_mkdir($conn_id, $sicherungsOrdner);
ftp_site($conn_id, "CHMOD 777 ".$sicherungsOrdner);
ftp_chdir($conn_id, $sicherungsOrdner);
ftp_close($conn_id);

function auslesen($ordner, $ftp_server, $ftp_user_name, $ftp_user_pass, $ftp_verz) {
if(file_exists($ordner)) {
$inhalt=opendir($ordner);
while($file = readdir($inhalt)){
if($file != '.' && $file != '..' && $file != 'Thumbs.db') {

//Datei oder Ordner?
if(count(explode(".", $file))>1) {
//echo substr($ordner, 2).$file.'<br />';

$conn_id = ftp_connect($ftp_server);
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
ftp_chdir($conn_id, $ftp_verz.'/'.substr($ordner, 2)); //in Verzeichniss wechseln
$fp = fopen(substr($ordner, 2).$file, 'r'); //Datei auslesen
ftp_fput($conn_id, $file, $fp, FTP_ASCII); //Datei speichern
ftp_close($conn_id);
fclose($fp);
}
else {
$conn_id = ftp_connect($ftp_server);
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
ftp_chdir($conn_id, $ftp_verz.'/'.substr($ordner, 2)); //in Verzeichniss wechseln
ftp_mkdir($conn_id, $file); //neuer Ordner anlegen
ftp_site($conn_id, "CHMOD 777 ".$file); //Ordner Rechte geben
ftp_close($conn_id);

auslesen($ordner.'/'.$file.'/', $ftp_server, $ftp_user_name, $ftp_user_pass, $ftp_verz);
}
}
}
closedir($inhalt);
}
}

auslesen($startVerz, $ftp_server, $ftp_user_name, $ftp_user_pass, $ftp_verz.'/'.$sicherungsOrdner);


ich danke für eure hilfe

lg timo

3 Antworten

0 Punkte
Beantwortet von Experte (6.4k Punkte)
Hallo Timo,

ftp_fput($conn_id, $file, $fp, FTP_ASCII); //Datei speichern



Bilder sollten im Binär-Modus übertragen werden und nicht im ascii-Modus...

Hoffe, das wars...

mfg, sup2010
0 Punkte
Beantwortet von timoxy Mitglied (133 Punkte)
ich danke dir supp2010 es funktioniert.

jetzt aber noch eine frage, wieso funktioniert mein scrippt nicht auf jedem server?

und zwar an einer anderen stelle habe ich folgenden code:

//Name der Homepage
$hp = "der name der page";

//Was soll gespeichert werden
$startVerz = "."; //realpath("./")."";

//Verzeichniss zum Zwischenspeichern
$verzSave = "save"; //ohne / am Ende mit Rechte 777

//Hier werden die Daten gespeichert
$ftp_server = "ftp.domain.de";
$ftp_user_name = "name";
$ftp_user_pass = "passowort";
$ftp_verz = "";

//Datenbanken Speichern?
$savedb = true; //DB sichern ja/nein?

//Name der zu speichernden Datenbank
$dbname = "datenbankname";

//Logindaten Datenbank
$dbhost = "localhost";
$dbuser = "username";
$dbpass = "pwasort";

/*-------------------------*/

$remote_file = $ftp_verz.'/savemain.php';
$local_file = $verzSave.'/savemain.php';
$handle = fopen($local_file, 'w');
$conn_id = ftp_connect($ftp_server);
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
if (ftp_fget($conn_id, $handle, $remote_file, FTP_ASCII, 0)) {
ftp_close($conn_id);
fclose($handle);
include_once $local_file;
unlink($local_file);
}


Warning: ftp_login() expects parameter 1 to be resource, boolean given in /var/www/vhosts/honig-von-timo.de/httpdocs/save.php on line 34

zeile 34 ist: $login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);

ich ahbe verschiedene provider ... bei den meisten tut dieses script aber bei einem provider nicht.

rechte des "save" ordners sind auf 777 gestellt

noch eine kurze info zum verständnis. dieser code befindet sich auf dem jeweiligen servern. er soll das script welches die datensicherung macht vom main server holen speichern, abarbeiten und dann löschen.

das script auf dem meinserver (code auszug davon im ersten post) speichert zusätzlich auch noch alle datenbanken. wenn eine änderung ansteht muss diese nur einmal vorgenommen werden ... deswegen dieser "umweg".

ich hoffe das ist soweit verständlich
0 Punkte
Beantwortet von
Warning: ftp_login() expects parameter 1 to be resource, boolean given in

heisst auf deutsch: ftp_login erwartet als ersten Parameter ein Handle, es wurde aber ein Boolean (logischer Wert) übergeben.

Zitat von php.net: ftp_connect
Gibt bei Erfolg einen SSL-FTP-Stream zurück oder FALSE, falls ein Fehler auftrat.

Also hat der Connect nicht geklappt und es wurde FALSE zurückgegeben.

Warum es nicht klappt. K.A. Aber manche Hoster sperren Client-Online-Funktionen für PHP.
...