Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Kein unlink einer Datei mit "+" möglich, alternative?

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Kein unlink einer Datei mit "+" möglich, alternative?

    Hallo,

    gibt es eine Möglichkeit wenn man ein Dateinamen mit einem Plus hat (z.B. "ABC-Richtlinie 20100512 v7 (seite 18+19).pdf") Diese mit unlink zu löschen?

    Wenn ich Sie löschen will ersetzt er das "+" immer mit einem Leerzeichen und somit kann er die Datei nicht finden.

    Hier mein Code zum besserem Verständnis:
    PHP-Code:
    <?php
    if ((isset($_GET['action']) && ($_GET['action']=="delfile") && (isset($_GET['id']) && (isset($_GET['f']))))) {
        
    $f $_GET['f'];
        
    $id $_GET['id'];
        
    $dir "/xx/xx/$id/";
        
    unlink("".$dir."".$f."");
        
    //unlink("/xx/xx/$id/$f");
        
    echo 'Die Datei '.$_GET['f'].' wurde gelöscht!';
            print 
    "<script>opener.location.reload();</script>";
    }
    ?>

    Oder scheint das Plus-Zeichen generell ein Problem zu sein?

    Vielen Dank!

  • #2
    Versuche es mal mit [MAN]urlencode[/MAN] und [MAN]urldecode[/MAN]. In der URL werden Leerzeichen durch ein + oder %20 dargestellt.
    [URL]http://hallophp.de[/URL]

    Kommentar


    • #3
      Zitat von mygov Beitrag anzeigen
      Wenn ich Sie löschen will ersetzt er das "+" immer mit einem Leerzeichen und somit kann er die Datei nicht finden.
      Auch hier zeigt sich mal wieder - wer von „ihm“ redet, weiß meistens nicht, was eigentlich wirklich vor sich geht.
      Bitte also in Problembeschreibungen „er macht [falsch]“ etc. vermeiden; stattdessen Ross und Reiter klar benennen. Das hilft auch dir selber weiter, weil du damit lernst, Problemstellen eindeutiger zuordnen zu können.


      Das + wird in ein Leerzeichen gewandelt, wenn du es im URL-Kontext benutzt.
      Also musst du es entsprechend maskieren, wenn es dort wirklich die simple Bedeutung Pluszeichen haben soll.

      Asipak hat dir ja schon Funktionen genannt; von denen brauchst du aber nur die erste. Um die Dekodierung kümmert sich PHP bei der Aufbereitung der Daten für $_GET schon selber.
      [SIZE="1"]RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?[/SIZE]

      Kommentar


      • #4
        Bei deinem Script sind die Sicherheitsaspekte noch zu beachten, so kann man jedes beliebige File löschen!

        und etwas wie
        unlink("".$dir."".$f."");
        ist schlechter stil und unnötig!

        Kommentar


        • #5
          @Papst: Wie würdest du den am besten/Sichersten/schönsten machen?

          Kommentar


          • #6
            [MAN]basename[/MAN] oder [MAN]realpath[/MAN]
            wären da interessant.
            Auch würde ich via [MAN]file_exists[/MAN] auf existenz der datei prüfen

            Kommentar


            • #7
              Zitat von Papst Beitrag anzeigen
              Auch würde ich via file_exists auf existenz der datei prüfen
              Damit handelst du dir (theoretisch) ein TOCTTOU-Problem ein.

              Deshalb kanst du genauso gut einfach löschen, und eine eventuelle Warnmeldung mit @ unterdrücken.
              [SIZE="1"]RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?[/SIZE]

              Kommentar


              • #8
                stimmt.
                Soetwas versuche ich allerdings immer zu vermeiden, gerade das @ halte ich für unsauber.

                Kommentar


                • #9
                  Bin ich auch kein großer Freund von; aber es gibt halt Fälle, wo man kaum darum herum kommt.

                  Wobei natürlich gilt, dass eine produktive Applikation sowieso nie Fehlermeldungen an den Client rausgeben sollte - die gehören in ein Logfile geschrieben.
                  Und wenn man dieses regelmäßig auswertet, dann erkennt man u.U. auch noch gleich generelle Probleme, bspw. wenn von der Applikation immer ein falscher Dateinamen-Parameter ausgegeben wird, so dass es regelmäßig zur Situation „Datei nicht löschbar, weil nicht vorhanden“ kommt.
                  [SIZE="1"]RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?[/SIZE]

                  Kommentar


                  • #10
                    mit urlencode hat es funktioniert, vielen dank!

                    Kommentar


                    • #11
                      Zitat von Papst Beitrag anzeigen
                      und etwas wie
                      Code:
                      unlink("".$dir."".$f."");
                      ist schlechter stil und unnötig!
                      Codeoptimierung:Code-Smells - PHP.de Wiki
                      [URL]http://hallophp.de[/URL]

                      Kommentar

                      Lädt...
                      X