Dateien auf dem Server über Protokoll löschen

son gohan

Erfahrenes Mitglied
Hallo,

mich würde mal interissieren ob es möglich ist sich ein Programm zu schreiben mit dem man ganz gezielt Dateien von seinem Webserver löschen kann, indem man z.B. eine Liste mit Dateinamen übergibt?

Ich bräuchte sowas um gezielt einzelne Seiten zu löschen von meinem Webserver ohne aber alle anderen Seiten die noch drauf sind mit zu löschen. Einzeln kann ich das aber nicht machen, da es sich bei meinen Löschaktionen meist um mehrer hundert Seiten aufeinmal handelt die ich auch noch einzeln raussuchen müsste.

Ich hab halt eine etwas vielleicht auch dumm gebaute Homepage wo alle Seiten im Root Verzeichnis liegen. Die Homepage selbst aber verschiedene Themen hat die auch so vom Menü aus getrennt sind nur halt vom Aufbau her liegen alle im Rootverzeichnis.

Jetzt habe ich z.B. 1000 Seiten die ich alle löschen muss, dazu habe ich bisher immer komplett alle Seiten vom Server löschen müssen auch die die ich nicht löschen wollte bzw. musste, dass würde ich jetzt aber gerne etwas geschickter machen können.
 
Du koenntest z.B. ein Script schreiben mit Upload-Formular und dort eine Text-Datei mit den zu loeschenden Dateinamen uebergeben.

Ja genau soetwas änhliches habe ich mir auch gedacht.

Wie hoch ist denn der Schwierigkeitsgrad für so etwas, ich habe immerhin schon länger kein PHP mehr gemacht.

Fertige Scripts in der Richtung wo ich nur kurz was ändern müsste gibt es nicht zufällig oder?
 
Nach fertigen Scripts brauchst Du mich eigentlich nicht fragen, da hab ich keinen Ueberblick. Ich kann Dir dazu nur sagen, dass ich sowas bisher nicht gebastelt hab. ;)

Schwer sollte sowas eigentlich nicht sein.
Du koenntest z.B. in jede Zeile einen Dateinamen schreiben und dann einfach die Datei zeilenweise abklappern und die Dateien loeschen.
 
PHP:
<?php
header('Content-Type:	text/html;charset=utf-8');
if(isset($_POST['submitted']))
{
	$tmpName	=	$_FILES['loeschdatei']['tmp_name'];
	$regName	= $_FILES['loeschdatei']['name'];
	$savePath	=	'/';
	
	if(is_uploaded_file($tmpName) && move_uploaded_file($tmpName, $savePath.$regName))
	{
		$delFiles = file($savePath.$regName);
		foreach($delFiles as $file)
		{
			$file	=	trim($file);
			if(file_exists($file) && is_writable($file))
			{
				if(unlink($file) === true)
				{
					echo $file.' wurde erfolgreich gelöscht.<br />';
				}
				else
				{
					echo '<span style="color: red;">Fehler:</span> <i>'.$file.'</i> konnte nicht gelöscht werden.<br />';
				}
			}
			else
			{
				echo '<span style="color: red;">Fehler:</span> Datei <i>'.$file.'</i> existiert nicht oder Schreibzugriff verweigert.<br />';
			}
		}
		// Noch die Löschdatei löschen...
		unlink($savePath.$regName);
	}
	else
	{
		echo '<span style="color: red;">Fehler:</span> Upload der Löschdatei fehlgeschlagen.';	
	}
}
?>

<form action="delFiles.php" method="post" enctype="multipart/form-data">
	<input type="file" name="loeschdatei" />
	<input type="submit" name="submitted" value="Lösch den Kram..."
</form>
Ich war mal so frei. Ist ungetestet. Die Datei wird Zeilenweise eingelesen und dann wird die Datei (mit Pfadangabe) aus der jeweiligen Zeile gelöscht. Natürlich musst du noch ein Login einbauen, oder mit einer .htaccess schützen, weil sonst jeder Depp deine Dateien löschen kann :)
Soll dir nur eines der Möglichkeiten zeigen... Du kannst es ja entsprechend ausbauen...
 
Zuletzt bearbeitet:
Jetzt wo ich weis das sowas möglich ist und es anscheinend auch nicht so schwer sein muss, ich selber es aber nicht hinbekomme, denke ich das ich am besten ins Jobforum ein Auftrag erstelle, vielen Dank für deine Hilfe.

//edit

PHP:
<?php
if(isset($_POST['submitted']))
{
	$tmpName	=	$_FILES['loeschdatei']['tmp_name'];
	$regName	= $_FILES['loeschdatei']['name'];
	$savePath	=	'/';
	
	if(is_uploaded_file($tmpName) && move_uploaded_file($tmpName, '/'.$regName))
	{
		$delFiles = file($savePath.$regName);
		foreach($delFiles as $file)
		{
			if(is_writable($file))
			{
				if(unlink($file) === true)
				{
					echo $file.' wurde erfolgreich gelöscht.<br />';
				}
				else
				{
					echo '<span style="color: red;">Fehler:</span> <i>'.$file.'</i> konnte nicht gelöscht werden.<br />';
				}
			}
			else
			{
				echo '<span style="color: red;">Fehler:</span> Kein Schreibzugriff auf <i>'.$file.'</i><br />';
			}
		}
	}
}
?>

<form action="delFiles.php" method="post" enctype="multipart/form-data">
	<input type="file" name="loeschdatei" />
	<input type="submit" name="submitted" value="Lösch den Kram..."
</form>
Ich war mal so frei. Ist ungetestet. Die Datei wird Zeilenweise eingelesen und dann wird die Datei (mit Pfadangabe) aus der jeweiligen Zeile gelöscht. Natürlich musst du noch ein Login einbauen, oder mit einer .htaccess schützen, weil sonst jeder Depp deine Dateien löschen kann :)
Soll dir nur eines der Möglichkeiten zeigen... Du kannst es ja entsprechend ausbauen...

Ach huch da war ich jetzt wohl ein wenig zu schnell mit meinem Jobangebot für das Script.

Vielen Dank für dein Script, ich werde es ausprobieren und mich dann doch erst wieder hier anstatt im Jobforum melden.

Bis ich es getestet habe wird es aber ein wenig dauern weil ich gleich erst einen alten Freund besuchen gehen muss.
 
Du hast doch schon eine Rohlösung oben... Musst du nur "verfeinern" ;)
Nachtrag War ich wohl zu langsam ;)
Nachtrag² Hab den Code noch etwas modifiziert...
Nachtrag³ Die Pfadangaben in der Löschdatei sind immer relativ zur delFiles.php, also z.B.
Code:
root/
    index.html
    einOrdner/
        delFiles.php
        test.html

Angaben in der lösch.txt
../index.html
test.html
 
Zuletzt bearbeitet:
Du hast doch schon eine Rohlösung oben... Musst du nur "verfeinern" ;)
Nachtrag War ich wohl zu langsam ;)
Nachtrag² Hab den Code noch etwas modifiziert...
Nachtrag³ Die Pfadangaben in der Löschdatei sind immer relativ zur delFiles.php, also z.B.
Code:
root/
    index.html
    einOrdner/
        delFiles.php
        test.html

Angaben in der lösch.txt
../index.html
test.html

Hallo :),

ich habe meine ersten Versuche folgendermaßen beendet.

1. Ich habe das Script so wie du es mir oben gegeben hast genommen und in ftp_loeschen.php umgenannt, im Formular des Scriptes habe ich auch unter dem Attribut action="" ftp_loeschen.php als Ziel angegeben.

2. Ich habe das Script auf mein Server geladen, vorher habe ich versucht mit meinem phpmanuel die einzelnen Funktionen zu verstehen, was aber nicht so gut geklapt hat, nicht nur weil ich etwas länger kein PHP mehr gemacht habe sondern auch weil ich zuvor auch nie mit PHP FTP Funktionen gearbeitet hatte.

3. Dann habe ich das Script im Browser aufgerufen und in das Formular erst mal manuell ein Dateinamen eingegeben folgendermaßen: -> auto.html , ohne Verzeichnisstriche oder ähnliches, die Datei liegt auch im Hauptverzeichnis genauso wie die ftp_loeschen.php

4. Nach dem ich dann den submit Button betätigt habe bekamm ich folgende Fehlermeldung:

Warning: move_uploaded_file(): SAFE MODE Restriction in effect. The script whose uid is 1390 is not allowed to access / owned by uid 0 in /home/www/web539/html/ftp_loeschen.php on line 9
Fehler: Upload der L?schdatei fehlgeschlagen.

Jetzt stehe ich leider auf dem Schlauch und weis nicht weiter, es wäre nett wenn ich deine Hilfe noch mal in Anspruch nehmen dürfte.
 
Anscheinend arbeitest du mit safe_mode = on... Das solltest du ändern, da es einige Sicherheitslücken/-probleme damit gibt... Hast du Zugriff auf die php.ini? Wenn nein, bitte deinen Hoster diese Einstellung bei dir zu ändern.
Dazu siehe auch:

Und zum Script. Es ist so konzipiert, dass du auf deinem Rechner eine Datei anlegst (sei es*.txt oder sonstwas) und dort die zu löschenden Dateien einträgst. Diese Datei lädst du dann über das Formular auf deinen Server und der Rest geht dann automatisch. Willst du direkt im Formular Dateinamen eingeben, muss man das Script noch etwas modifizieren...
 
Zuletzt bearbeitet:
Zurück