Per MySQL auf anderen Server Dateien löschen

PHP-Fan

Erfahrenes Mitglied
Hallo,

ich habe eine Tabelle, wo in einer Spalte alle URLs zu Downloads sind, die sich aber auf einem anderen Server befinden, der aber auch mir gehört. Ich möchte gerne, diese Werte auslesen (schon geschen), eine FTP Verbindung aufbauen (schon geschehen) und alle Dateien auf dem Server, die keinen Eintrag in der Datenbank haben, sollen entfernt werden. Ich habe hier nocheinmal ein Bild für euch um das etwas zu verdeutlichen!

tut.jpg


Mein bisheriger Code:

PHP:
<div align="center">

<?

require("xx.php");

$dbverbindung = mysql_connect($server, $user, $password);

$dbanfrage = "SELECT * from cm_dl_info ORDER BY id";

$result = mysql_db_query ($dbname, $dbanfrage, $dbverbindung);

while ($ausgabe = mysql_fetch_array ($result)){

?>

-> <b><? echo $ausgabe[link]; ?></b><br>

<? 						      $ftp_server = "bumbum.org";
							$ftp_user_name = "fx";
							$ftp_user_pass = "x";
							$destination_file = "$filename.torrent";
							$source_file = "$filename.torrent";

							// Herstellen der Basis-Verbindung
							$conn_id = ftp_connect("$ftp_server");

							// Einloggen mit Benutzername und Kennwort
							$login_result = ftp_login($conn_id, "$ftp_user_name", "$ftp_user_pass");

							// Verbindung überprüfen
							if ((!$conn_id) || (!$login_result)) {
      						    echo "FTP Verbindung nicht hergestellt!<br>";
        						echo "Verbindung mit $ftp_server als Benutzer $ftp_user_name nicht möglich<br>";
        					die;
    							} else {
							ftp_pasv ( $conn_id, true );
        						echo "Passiv-Modus eingeschaltet...<br>";
       							echo "FTP Verbindung hergestellt...<br>";
    							}
    							
    						// Datei löschen
							unlink("$filename.torrent");
    							
    						// Schließen des FTP-Streams
							ftp_quit($conn_id);

							

}

?>

Wie mache ich am besten weiter?
Weiß nicht was ich jetzt wo machen soll...
Bin gerade leicht überfordert, hoffe Ihr könnt mir helfen!
 
Hallo PHP-Fan,

wie wäre es mit:
PHP:
if (!file_exists($ausgabe["link"])){
// Dateieintrag in der Datenbank löschen
mysql_query("DELETE FROM tabelle WHERE linkname= '".$ausgabe["link"]."'", $verbindung);
}


//Edit
Dieses Beispiel dient dazu alte Links in
der Datenbank zu löschen falls diese keine
entsprechenden Dateien auf dem Server haben.

mfg,
blount
 
Zuletzt bearbeitet:
Vielen Dank schon einmal für eure Hilfe...
Neues Problem:

Derzeiter Code:

PHP:
<div align="center">

<?

require("xx.php");

$dbverbindung = mysql_connect($server, $user, $password);

$dbanfrage = "SELECT * from cm_dl_info ORDER BY id";

$result = mysql_db_query ($dbname, $dbanfrage, $dbverbindung);

while ($ausgabe = mysql_fetch_array ($result)){

?>

-> <b><? echo $ausgabe[link]; ?></b><br>

<?                               $ftp_server = "bumbum.org";
                            $ftp_user_name = "fx";
                            $ftp_user_pass = "x";
                            $destination_file = "$filename.torrent";
                            $source_file = "$filename.torrent";

                            // Herstellen der Basis-Verbindung
                            $conn_id = ftp_connect("$ftp_server");

                            // Einloggen mit Benutzername und Kennwort
                            $login_result = ftp_login($conn_id, "$ftp_user_name", "$ftp_user_pass");

                            // Verbindung überprüfen
                            if ((!$conn_id) || (!$login_result)) {
                                  echo "FTP Verbindung nicht hergestellt!<br>";
                                echo "Verbindung mit $ftp_server als Benutzer $ftp_user_name nicht möglich<br>";
                            die;
                                } else {
                            ftp_pasv ( $conn_id, true );
                                echo "Passiv-Modus eingeschaltet...<br>";
                                   echo "FTP Verbindung hergestellt...<br>";
                                }
                                
                            if (!file_exists($ausgabe["link"])){

							// Datei löschen
							unlink("$ausgabe['link']");

							echo "<font color='green'>$ausgabe['link'] entfernt</font><br>";

							}else{

							echo "<font color='red'>$ausgabe['link'] nicht entfernt</font><br>";

							}
                                
                            // Schließen des FTP-Streams
                            ftp_quit($conn_id);

                            

}

?>

Nur jetzt habe Ich ein Problem.
Die Downloads sind in der Tabelle aber nicht mit "wasser.rar" bezeichnet sondern da steht auch noch eine URL vor. Als Beispiel: http://www.hulubulu.de/wasser.rar

Diese URL muss ich aber doich entfernen sonst findet er ja keinen passenden Eintrag oder?
 
Wieso probierst du es nicht einfach aus ? Sowas verstehe ich nicht !

Die Funktion basename() wird dir helfen. Aber bitte probiere das auch aus anstatt zu fragen, und dann anhand eines Problems die frage zu stellen.
 
Du musst allerdings den umgekehrten Weg
gehen. Du musst den Inhalt des ftp's auslesen
und mit der Datenbank vergleichen. Wenn der
Eintrag nicht in der Datenbank vorhanden ist
wird die Datei gelöscht.

Ich kann nicht überprüfen ob das Beispiel
hundert prozentig funktioniert aber es sollte die
Vorgehensweise klar machen.

PHP:
$hdl = opendir ("./verzeichnis/");
						while ($res = readdir ($hdl)){
								$datenbank[]=$res;
						}
						closedir($hdl);

foreach ($datenbank as $var){
  // DATENBANKVERBINDUNG HERSTELLEN
  $sql="SELECT * FROM tabelle WHERE linkname= '".$var."'";
  $ergebnis=mysql_query($sql, $verbindung);

  if (mysql_num_rows($ergebnis)<1){
   unlink($var); 
 }
}


mfg,
blount
 
Zuletzt bearbeitet:
Ich habe jetzt dieses Script:

PHP:
<?php

$FTPServer   = "";
$FTPUser     = "";
$FTPPasswort = "";

$Verzeichnis = ".";

$VerbindungsID = ftp_connect($FTPServer);
$LoginErgebnis = ftp_login($VerbindungsID, $FTPUser, $FTPPasswort);

if($VerbindungsID && $LoginErgebnis)
{
	$Dateiliste=ftp_nlist($VerbindungsID, $Verzeichnis);
	sort($Dateiliste);
	echo"<table border=\"0\">",
		"<tr>",
		"<td><b>Name</b></td>",
		"<td><b>Größe</b></td>",
		"<td><b>Letzte Änderung</b></td>",
		"</tr>";
	for($i=0; $i<count($Dateiliste); $i++)
	{
		$Dateigroesse=ftp_size($VerbindungsID, $Dateiliste[$i]);
		echo"<tr>";
		if($Dateigroesse=="-1")
		{
			$Ordner++;
			echo"<td colspan=\"3\"><font color=\"red\">",
				$Dateiliste[$i],
				"</font></td>";
		}
		else
		{
			$Dateien++;
			$Verzeichnisgroesse+=$Dateigroesse;
			echo"<td>",
				$Dateiliste[$i],
				"</td>",
				"<td align=\"right\">",
				number_format($Dateigroesse, 0, ",", "."),
				" Bytes</td>",
				"<td>",
				date("d.m.Y H:i", ftp_mdtm($VerbindungsID, $Dateiliste[$i])),
				"</td>";
		}
		echo"</tr>";
	}
	echo"<tr>",
		"<td>",
		$Ordner,
		" Ordner, ",
		$Dateien,
		" Dateien</td>",
		"<td align=\"right\">",
		number_format($Verzeichnisgroesse, 0, ",", "."),
		" Bytes</td>",
		"<td>&nbsp;</td>",
		"</tr>";
	echo"</table>";
}
else
{
	echo"Es konnte keine Verbindung mit dem FTP-Server hergestellt werden.";
}

?>

Die Daten werden auch ausgegeben, wie kann ich das jetzt so machen dass er das mit der DB Vergleicht?
 
Zurück