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!

  • Asipak
    antwortet
    Zitat von Papst Beitrag anzeigen
    und etwas wie
    Code:
    unlink("".$dir."".$f."");
    ist schlechter stil und unnötig!
    Codeoptimierung:Code-Smells - PHP.de Wiki

    Einen Kommentar schreiben:


  • mygov
    antwortet
    mit urlencode hat es funktioniert, vielen dank!

    Einen Kommentar schreiben:


  • ChrisB
    antwortet
    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.

    Einen Kommentar schreiben:


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

    Einen Kommentar schreiben:


  • ChrisB
    antwortet
    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.

    Einen Kommentar schreiben:


  • Papst
    antwortet
    [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

    Einen Kommentar schreiben:


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

    Einen Kommentar schreiben:


  • Papst
    antwortet
    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!

    Einen Kommentar schreiben:


  • ChrisB
    antwortet
    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.

    Einen Kommentar schreiben:


  • Asipak
    antwortet
    Versuche es mal mit [MAN]urlencode[/MAN] und [MAN]urldecode[/MAN]. In der URL werden Leerzeichen durch ein + oder %20 dargestellt.

    Einen Kommentar schreiben:

Lädt...
X