Datei mit Umlauten und Sonderzeichen löschen

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • #16
    das kann nicht sein, mach die testausgabe von dem _gesamten_ parameter.

    wunderlich ist, dass mime_content_type wohl den typ bestimmen kann, filesize aber nicht. daher ist die vermutung, dass du beim zusammenstellen des pfades etwas vermurkst. warum nicht einfach $file an filesize übergeben?

    Comment


    • #17
      ach ja, und file_exists() ist erst mal wichtiger, als filesize. teste damit, bis du erfolg hast, dann kannst du wieder filesize einbauen.

      Comment


      • #18
        Original geschrieben von penizillin
        ach ja, und file_exists() ist erst mal wichtiger, als filesize. teste damit, bis du erfolg hast, dann kannst du wieder filesize einbauen.
        Komischerweise gibt file_exists() true zurück:

        PHP Code:
            function downloadFile($file) {
                
        //var_dump($file);
                
        var_dumpfile_exists(FILE_ROOT.$this->name."/".urldecode($file)));
                echo 
        FILE_ROOT.$this->name."/".urldecode($file);
                
        $mimetype mime_content_type($file);
                if(!
        $filesize = @filesize(FILE_ROOT.$this->name."/".urldecode($file))) {
                    
        //throw new Exception("No such File.");
                    //return false;    
                
        }
                
        //var_dump(urldecode($file));
                
        header("Content-type: ".$mimetype);
                
        header("Content-Disposition: attachment; filename=\"$file\"");
                
        header("Content-Length: $filesize");
                
                
        readfile(FILE_ROOT.$this->name."/".$file);

            } 
        nun kommt:

        bool(true) ../files/project1/äöü__ dasa$$$ as.txt

        Comment


        • #19
          ermittele mal mit realpath() den absoluten pfad und übergib ihn noch mal an alle funktionen

          Comment


          • #20
            Also das Download Problem hat sich nun gelöst. Da mein Testfile 0 Byte gross ist gibt filesize 0 zurück, was bei PHP natürlich als FALSE intepretiert wird und somit wird die Exception ausgelöst.
            Dummerweise läuft das beim ursprünglichen Problem mit dem löschen etwas anders.
            Da findet das unlink() die Datei nicht:

            PHP Code:
                function deleteFile($file) {
                    
            var_dump($file);
                    
            //var_dump($this->mod);
                    
            if($this->mod >= && $this->mod <= 7) {
                        
            unlink(FILE_ROOT.$this->name."/".urldecode($file));
                        return 
            true;
                    } else {
                        return 
            $file;
                    }
                } 
            Das var_dump() gibt noch alles richtig aus.

            Comment


            • #21
              du darfst trotzdem auf die letzte antwort eingehen.

              Comment


              • #22
                Ok... realpath():
                PHP Code:
                    function deleteFile($file) {
                        
                var_dump(file_exists(FILE_ROOT.$this->name."/".$file));
                        
                var_dump(realpath(FILE_ROOT.$this->name."/".$file));
                        
                        
                //var_dump($this->mod);
                        
                if($this->mod >= && $this->mod <= 7) {
                            
                unlink(realpath(FILE_ROOT.$this->name."/".$file));
                            return 
                true;
                        } else {
                            return 
                $file;
                        }
                    } 
                Die var_dump()'s geben beide bool(false) zurück...


                Was mach ich da falsch ? Ist ja im Prinzip genau gleich wie beim Download, oder hab ich was übersehen ?

                Nachtrag:
                komischerweise gibt unlink() ein permission denied als error.
                Last edited by tariq22; 19-02-2007, 14:38.

                Comment


                • #23
                  Da mein Testfile 0 Byte gross ist gibt filesize 0 zurück, was bei PHP natürlich als FALSE intepretiert wird und somit wird die Exception ausgelöst.
                  Das ist aber nur der Fall wenn man den Vergleich mittels == macht bzw != und nicht mit === und !== . Du solltest bei Fkt die false und einen int zurückgeben können immer auch auf den Typ prüfen.
                  PHP Code:
                  $test 'ich bin ein string';
                  if(
                  strpos($test,'ich') != false) {
                      echo 
                  'ich kommt im String: '.$test.' nicht vor';

                  Du stimmst mir sicherlich zu dass es doch im String vorkommt. Nur interpretiert PHP beim Vergleich eines bool mit einem int einen Wert von 0 als false. Würdest du in einem solchen Fall !== verwenden würde alles funzen...

                  Gruss

                  tobi
                  Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

                  [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
                  Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

                  Comment


                  • #24
                    PHP Code:
                    $absoluter_pfad realpath(...); 
                    davon var_dump

                    file_exists auf den absoluten pfad, davon var_dump

                    Comment


                    • #25
                      Original geschrieben von jahlives
                      Das ist aber nur der Fall wenn man den Vergleich mittels == macht bzw != und nicht mit === und !== . Du solltest bei Fkt die false und einen int zurückgeben können immer auch auf den Typ prüfen.
                      tobi
                      Vielen Dank für den Tipp!

                      file_exists auf den absoluten pfad, davon var_dump
                      habe testweise mal das ausprobiert:
                      PHP Code:
                      var_dump(file_exists('D:/xampp/xampp/htdocs/nariq/files/'.$this->name."/".$file)); 
                      führt jedoch wieder zu einem bool(false).

                      Comment


                      • #26
                        das ist ja auch unfug, du sollst realpath() einsetzen.

                        Comment


                        • #27
                          sry...
                          PHP Code:
                          var_dump(realpath(FILE_ROOT.$this->name."/".$file)); 
                          gibt auch bool(false) zurück (also nur bei Dateien mit Umlauten drin).

                          Comment


                          • #28
                            Habe die Lösung gefunden!

                            Mit der Funktion utf8_decode(); findet er die Datei:
                            PHP Code:
                                function deleteFile($file) {
                                    if(
                            $this->mod >= && $this->mod <= 7) {
                                        
                            unlink(FILE_ROOT.$this->name."/".utf8_decode($file));
                                        return 
                            true;
                                    } else {
                                        return 
                            $file;
                                    }
                                } 
                            Vielen vielen Dank für deine Hilfe

                            Comment

                            Working...
                            X