Datei vom Server löschen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Datei vom Server löschen

    Hallo Forum,

    ich lasse eine Datei per "move_upload" hochzuladen, dass funktioniert auch soweit:

    Code:
    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:

    Code:
    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

  • #2
    Huch?
    Ich denke, einmal reicht. -> http://www.php-resource.de/forum/sho...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.

    Kommentar


    • #3
      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:

      Code:
      unlink('../documents/'($_GET['id'])'.'.$ext);
      Vielleicht kann mir jemand nochmals ein Tipp oder Anweisung geben.

      Kommentar


      • #4
        Code:
        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!

        Kommentar


        • #5
          Das mit dem unlink funktioniert soweit:

          Code:
          unlink('../documents/'.$_GET['id'].'.zip');
          Jedoch nur wenn ich die Endung vorgebe. Ich habe versucht über:

          Code:
          $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:

          Code:
          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.

          Kommentar


          • #6
            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???

            Kommentar


            • #7
              Hallo TobiaZ,

              folgende Info bekomme ich zurück, hier fehlt wie man sieht, die Endung nach dem ".":


              Code:
              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

              Kommentar


              • #8
                Dann benutzt du jetzt mal (gemäß unserer Regeln ) das error_reporting(E_ALL) und guckst, wo der Wert auf der Strecke bleibt.

                Kommentar


                • #9
                  Das gibt mir nur folgendes zurück:

                  Code:
                  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.

                  Kommentar


                  • #10
                    Und die andere Datei rufst du nicht mit ?ext=pdf* auf?
                    Wenn du nen Parameter verwendest, musst du ihn natürlich auch angeben!


                    __
                    *Beispiel

                    Kommentar


                    • #11
                      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?

                      Code:
                      $ext = 'pdf' OR 'ppt' OR 'zip';
                      
                      unlink('../documents/'.$_GET['id'].'.'.$ext);

                      Kommentar


                      • #12
                        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.

                        Kommentar


                        • #13
                          Ähm???

                          Mal ganz ehrlich, was erwartest du dir von soetwas?
                          PHP-Code:
                          $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.

                          PHP-Code:
                          $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.

                          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.

                          Kommentar

                          Lädt...
                          X