Datei mit Umlauten und Sonderzeichen löschen

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

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

    Kommentar


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

      Kommentar


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

        Kommentar


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

          Kommentar


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

            Kommentar


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

              Kommentar


              • #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.
                Zuletzt geändert von tariq22; 19.02.2007, 14:38.

                Kommentar


                • #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)

                  Kommentar


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

                    file_exists auf den absoluten pfad, davon var_dump

                    Kommentar


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

                      Kommentar


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

                        Kommentar


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

                          Kommentar


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

                            Kommentar

                            Lädt...
                            X