Archiv verlassen und diese Seite im Standarddesign anzeigen : Datei vom Server löschen
mR_brown 20-04-2008, 18:31 Hallo Forum,
ich lasse eine Datei per "move_upload" hochzuladen, dass funktioniert auch soweit:
move_uploaded_file($_FILES['document']['tmp_name'], '../documents/'.mysql_insert_id().'.'.$ext);
} else {
$error = 'Dateityp
Jetzt möchte ich die Datei aber auch wieder löschen lassen, zur Zeit benutze ich folgende Anweisung, jedoch löscht dies nur den Datenbankeintrag:
mysql_query("DELETE FROM documents WHERE id = ".quote_smart($_GET['id']));
Wie schaffe ich es diese nun auch vom Server zu löschen, per unlink?
Vielen Dank für die Hilfe.
Gruß,
mR_brown
Huch?
Ich denke, einmal reicht. -> http://www.php-resource.de/forum/showthread.php?s=&threadid=91524
Auch, wenns zunächst das falsche Forum gewesen ist. Man kann den Thread ja immer noch verschieben.
Außerdem müsste dein Problem doch gelöst sein.
mR_brown 20-04-2008, 18:42 Ich weiß, ich war etwas zu voreilig.
Ich sitze gerade halt vor dem Problem und hab irgendwie versucht nochmals schnell eine Info zu bekommen, da ich auch nicht wusste, wie schnell (nach Anfrage) so ein Thema verschoben ist.
Sorry.
Leider ist mir aber damit noch nicht ganz geholfen, bin leider nicht ganz so fit in PHP/Mysql, sondern versuche über Buch-Snippets und allgemeine Codes durch Suche zusammen zu packen :-)
Hab sowas mal probiert:
unlink('../documents/'($_GET['id'])'.'.$ext);
Vielleicht kann mir jemand nochmals ein Tipp oder Anweisung geben.
unlink('../documents/'.$_GET['id'].'.'.$ext);Aber du musst beachten, dass ein böswilliger Benutzer in das GET-Feld jeden beliebigen Dateinamen schreiben kann, also: unsicher, unsicher!
mR_brown 21-04-2008, 18:18 Das mit dem unlink funktioniert soweit:
unlink('../documents/'.$_GET['id'].'.zip');
Jedoch nur wenn ich die Endung vorgebe. Ich habe versucht über:
$ext = ($_GET['ext']);
unlink('../documents/'.$_GET['id'].'.'.$ext);
Doch hier bekommt er glaube ich nicht den richtigen Wert übermittelt, wie schaffe ich es zu der richtigen ID, den richtigen Dateitypen anzuhängen?
So kommt es in die Datenbank:
if (isset($_POST['usergroup'])) {
if (!empty($_FILES['document']['name'])) {
$split = explode('.', $_FILES['document']['name']);
$ext = $split[count($split) - 1];
if ($ext == 'pdf' || $ext == 'ppt' || $ext == 'xls' || $ext == 'doc' || $ext == 'pptx' || $ext == 'xlsx' || $ext == 'docx' || $ext == 'zip') {
mysql_query("INSERT INTO documents
(usergroup, subject, filename, filetitle, description, academic, filesize, date)
VALUES
('".$_POST['usergroup']."', '".$_POST['subject']."', '".$_FILES['document']['name']."', ".quote_smart($_POST['filetitle']).",
".quote_smart($_POST['description']).", ".quote_smart($_POST['academic']).", ".filesize($_FILES['document']['tmp_name']).", NOW())
");
move_uploaded_file($_FILES['document']['tmp_name'], '../documents/'.mysql_insert_id().'.'.$ext);
} else {
$error = 'Dateityp nicht erlaubt. Erlaubte Dateitypen: .pdf, .ppt(x), .xls(x), .doc(x), .zip';
}
} else {
$error = 'Bitte eine Datei auswählen.';
}
Vielen Dank für Eure Hilfe.
Doch hier bekommt er glaube ich nicht den richtigen Wert übermittelt, wie schaffe ich es zu der richtigen ID, den richtigen Dateitypen anzuhängen? Wie wäre es, wenn du diese Vermutung einfach mal mit ner Testausgabe prüfst??? :rolleyes:
mR_brown 21-04-2008, 18:25 Hallo TobiaZ,
folgende Info bekomme ich zurück, hier fehlt wie man sieht, die Endung nach dem ".":
Warning: unlink(../documents/14.) [function.unlink]: No such file or directory in /var/www/ud05_99/html/demo/nda_download/admin/delete_document.php on line 14
Dann benutzt du jetzt mal (gemäß unserer Regeln :teach: ) das error_reporting(E_ALL) und guckst, wo der Wert auf der Strecke bleibt.
mR_brown 21-04-2008, 18:45 Das gibt mir nur folgendes zurück:
Notice: Undefined index: ext
Liegt es daran, dass ich mit zwei Dokumenten arbeite, einmal eine php, wo die Daten in die Datenbankgeschrieben werden und die Löschanweisung habe ich in einer anderen php.
Und die andere Datei rufst du nicht mit ?ext=pdf* auf?
Wenn du nen Parameter verwendest, musst du ihn natürlich auch angeben!
__
*Beispiel
mR_brown 22-04-2008, 18:10 Hallo Tobiaz, per $ext werden mehrere Typen verwendet, wie Du einige Posts vorher siehst, dort habe ich den Text, welcher die Datei uploaded und in die Datenbank packt, gepostet.
Wenn ich jetzt in der löschen-Datei folgende Anweisung mache, nimmt er nur das PDF als Endung, kann er sich nicht die richtige suchen?
$ext = 'pdf' OR 'ppt' OR 'zip';
unlink('../documents/'.$_GET['id'].'.'.$ext);
mR_brown 24-04-2008, 12:21 Hallo Leute,
kann mir keiner ein Tipp geben, wie ich "id" und "ext" zusammen bekomme.
In der Datei, wo die Löschung angewiesen ist, bekomme ich ja die ID rein, nur die dazugehörige Endung, wie diese auf dem Server liegt fehlt. Kann nicht einfach geprüft werden ob eine von den 3 dateiendungen passt und dann löscht er es wenn es übereinstimmt?
Danke.
Ähm???
Mal ganz ehrlich, was erwartest du dir von soetwas?
$ext = 'pdf' OR 'ppt' OR 'zip';
Du musst natürlich wissen, welche Endung die Datei hat, sonst kannst du sie nicht löschen! unlink erwartet nunmal den vollen Dateinamen, alles andere wäre auch unsinnig.
Wenn du der Meinung bist, dass du den Dateinamen nicht wissen kannst, musst du halt mit so ner art Bruteforce alle Dateinamen durchtesten.
$ext = array('php','html','pdf');
for(i=0;i<count(ext);i++)
if(file_exists(zusammengesetzter name))
unlink(zusammengesetzter name);
kann mir keiner ein Tipp geben, wie ich "id" und "ext" zusammen bekomme. Du hast sie doch schon zusammen bekommen. Du kannst nur nicht alle möglichen extensions in einen String bekommen. :rolleyes:
In der Datei, wo die Löschung angewiesen ist, bekomme ich ja die ID rein, nur die dazugehörige Endung, wie diese auf dem Server liegt fehlt. Kann nicht einfach geprüft werden ob eine von den 3 dateiendungen passt und dann löscht er es wenn es übereinstimmt? richtig wäre es, die extension aus der DB (oder sonstwoher) zu besorgen, anonsten hilft wie gesagt nur bruteforce.
|
|