download die Xte

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

  • download die Xte

    da mein beitrag unter bs unter zu gehen scheint und es ja jetzt doch php ist, dann hier.

    also jungs, nachdem ich sämtliche threads durchforscht und meine bücher gewälzt habe, bin ich fast fertig damit. das ein oder andere problem taucht dennoch auf. wenn ich ganz fertig bin, poste ich die lösung.
    zuerst habe ich das problem, wie ich in folgender fkt. noch die dateigröße hinein bekomme.

    PHP-Code:
    function read_dir_file($folder){   
        
        
        
                    
    //$read_dir = "exchange";
                    
    $folder "exchange/".$folder;
                echo 
    "folder=".$folder."<br>";
                if (
    is_dir($folder)){

                    
    $dir opendir($folder);
                    
    $list = array();//leeres array für dateien
                    
    $filelist = array(); //leeres array für codierte filenamen
                        
    while ($file=readdir($dir))//liest ordner aus
                        
    {
                            
                            
                            if (
    $file!='.' AND $file!='..'){
                                
                                
    array_push($list,basename($file));//fügt array(list) dateien als werte hinzu
                                 
    sort($list);//sortiert array aufsteigend
                                 
                             
                                
                            
           
                                              
    }
                                            }
                                            for (
    $i=0$i<=count($list);$i++){
                            while(list (
    $key$datei) = each ($list)){
                                
                                
    $icon strtolower(substr(strrchr($datei,"."),1)); //strtolower=wandelt in kleinbuchstaben, substr=liefert rest nach erstem zeichen, strrchr=liefert rest nach letzem vorkommen vom punkt
                                //$size = filesize($datei,$dir);
                                
    $type $icon;//für Hinweis auf Dateityp über die endung
                                
                                
    $name substr ($datei0,strrpos($datei".")); //liefert string vorm letzten punkt als name zwischen a-tags
                                
                                //echo "name= ".$name;
                                
                                
    if ($icon != "doc" && $icon != "pdf" && $icon != "rar" && $icon != "zip" && $icon != "exe" && $icon != "php" && $icon != "jpg" && $icon != "gif"){
                                    
    $icon "txt";
                                }
                                
                                
    //$link = array_push($filelist, $datei);
                                //$link = $link - 1;
                                
                                //echo "name = ".$filelist[$link];
                                
    if ($icon != "php"){
                                echo 
    "<img src=\"images/".$icon.".gif\" width=\"18\" height=\"19\" border=\"0\" />&nbsp;";
                                echo 
    "<a href=\"#\" class=\"more\" onfocus=\"this.blur()\" alt=\"Download\" title=\"Download\" onclick=\"openWindow('download.php?folder=".$folder."&datei=".$datei."&type=".$type."','1','width=800,height=500')\">";
                                    echo 
    $name."</a>&nbsp; <span class=\"normklein\">(".$type.", ".$size.")</span><br><br>";
                                }
                                
                            } 
    $i++;  
                        } 
                        
    //print_r($filelist);
                        //print_r($link);
                        
    closedir($dir);
                        
                       }else{
                        echo 
    "shit";
                    }
                            
    //return $list;
        


    oben über das auskommentierte filesize ging es nicht.

    hier ist datei für den download:

    PHP-Code:
    <?php 

    $datei  
    $_GET['datei'];
    $folder $_GET['folder'];
    $type   $_GET['type'];
        
        
        
    $content_type = array(     "doc" => "application/msword",
                    
    "rar" => "application/octet-stream",
                    
    "zip" => "application/zip",
                    
    "exe" => "application/octet-stream",
                    
    "pdf" => "application/octet-stream",
                    
    "txt" => "text/plain",
                    
    "jpg" => "images/jpeg",
                    
    "gif" => "images/gif");
        
        
        
        
    $save $datei;
        
    $now  gmdate('D, d M Y H-i-S').'GMT';
        
        
    header("Content-Type: ".$content_type[$type]."");
          
    //header("Content-Length: ".$data."");
        
    header("Expires: 0");
        
    header("Content-Transfer-Encoding: binary");
        
        if (
    substr_count(strtolower($_SERVER["HTTP_USER_AGENT"]), "ie") != 0){ //für IE
             
            
    header("Content-Disposition: inline; filename=".$save."");
            
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 
            
    header("Pragma: public");
        }else{
            
    header("Content-Disposition: attachment; filename=".$save."");
            
    header("Pragma: no-cache");  
        }
        

        
    //readfile($datei);
        
    $file fopen($datei,"rb");
        
    $data fread($file,filesize($datei));
        
        echo 
    $data;
        
    fclose($file);
    ?>

    hier habe das problem, dass ich die größe im header mit übergeben will, von mir aus als $_GET-parameter aus der vorhergehenden fkt.

    viel wichtiger ist mir jedoch die anpassung der header an möglichst viele browser.

    vielleicht sollte ich kurz erklären was passiert. zuerst noch etwas kurioses:
    eigentlich ist der header für jpg's und gif's image/jpeg usw., schreibe ich aber images/jpg, werden die pics zum download angeboten, andernfalls geöffnet, komisch.
    okay:
    MSIE will alles downloaden bis auf *.doc, *.txt, *.pdf, die werden geöffnet
    opera will alles downloaden bis auf *.pdf, *.txt, die werden geöffnet
    mozilla ist top, will alles downloaden
    NN downloadet alles ausser pics und pdf, öffnet diese. problem bei NN, er hängt an alle downloads .php an, wenn ich die endungen entferne, sind die dateien aber trotzdem okay.

    grundsätzliche möchte ich aber alles downloaden.
    wie kann ich dem entgegenkommen, vielleicht hat der ein oder andere noch nen tipp.

    THX FOR ALL
    [color=red]musse rühre, musse probiere=>iss a pulsgeber ![/color]

  • #2
    du rufst filesize mit 2 parametern auf, aber es darf nur einer sein
    Ich denke, also bin ich. - Einige sind trotzdem...

    Kommentar


    • #3
      okay, das geht nicht, fehler: misslungen, datei oder ordner nicht vorhanden.
      vielleicht steht das auch an der falschen stelle? vielleicht könnte ich es auch als dritte dimension zum array hinzufügen? da ist mir alledings nicht so klar wie. hab schon echt ne menge ausprobiert, nix geht. ist vielleicht noch ne andere macke drin?
      hat jemand noch nen tip zu den headern?
      [color=red]musse rühre, musse probiere=>iss a pulsgeber ![/color]

      Kommentar


      • #4
        die datein, deren namen du liest sind im ordner $folder

        filesize sucht aber die datei im aktuellen verzeichnis, das sehr wahrscheinlich verschieden von $folder is
        du müsstest also $folder vor den dateinamen schreiben, damit's mit filesize läuft

        ich würd mir für jede datei einarray machen mit name, site, mime, realname
        name is der reine dateiname und realname is der komplette pfad zur datei

        die funktion realpath sollte dir dabei helfen
        Ich denke, also bin ich. - Einige sind trotzdem...

        Kommentar


        • #5
          THX


          PHP-Code:
          $size filesize($folder."/".$datei); 
          klappt jetzt.

          dein zweiter vorschlag, für jede datei ein extra array erstellen, gefällt mir, muss
          jedoch zugeben, dass ich mich mit mehrdimensionalen array noch ein wenig schwer tue, zumindest was die zusammenstellung dessen, durch verschiedene parameter, betrifft.
          ich hatte ja schon andere sachen aus den ganzen threads hier probiert, da war soweit ich mich errinner auch ne menge von dir dabei, geklappt hats nicht.

          mir würde es reichen ein paar anhaltspunkte für die zusammenstellung des array zu bekommen.
          im übrigen hat er bei mir auch keine unterscheidung zischen is_dir() und is_file() treffen können. is_file() hat er schlichtweg nicht akzeptiert, liegst das eventuell an WIN?

          danke
          [color=red]musse rühre, musse probiere=>iss a pulsgeber ![/color]

          Kommentar


          • #6
            das array stellst du so zusammen
            PHP-Code:
            $dateien=array();

            //innerhalb der schleife, mit der du die dateien ausliest
            $datei['name']=$file;
            $datei['realname']=realpath($folder.'/'.$file);
            $datei['size']=filesize($datei['realname']);
            $datei['mime']='mime-typ abhängig von der erweiterung');
            $dateien[]=$datei;


            //zugriff
            echo $dateien[0]['realname'];
            echo 
            $dateien[478]['size']; 
            was du mit is_file meinst versteh ich nich so ganz
            Ich denke, also bin ich. - Einige sind trotzdem...

            Kommentar


            • #7
              wow, coole sache. jetzt check ich das!
              werde das nachher gleich mal testen, erstatte bericht.

              ich wollte die fkt. zum ordnerauslesen erst rekursiv mit allen unterodrnern.
              mit is_file() hat hat er aber nicht die files erkannt.
              da unterordner jetzt nicht mehr in frage kommen, ist das nicht so wichtig.
              wollte nur nachfragen für den fall, dass ich mal brauche.

              jetzt haben wir scheinbar ein problem gelöst, jedoch ist noch die geschichte mit den headern offen.

              THX
              [color=red]musse rühre, musse probiere=>iss a pulsgeber ![/color]

              Kommentar


              • #8
                zu deinenheadern fällt mir grad nix ein, aber kann es sein, dass is_file nich geht, da is_file auch in dem aktuellen verzeichnis arbeitet und nicht in dem, dass du mit opendir geöffnet hast?
                Ich denke, also bin ich. - Einige sind trotzdem...

                Kommentar


                • #9
                  hmm, das weiß ich jetzt nicht mehr genau, ist schon paar tage her. soweit ich errinnere hatte ich aber chdir() drin, scheint aber auch nicht immer zu klappen. ich probiere das später nochmal.
                  danke dir erstmal.
                  [color=red]musse rühre, musse probiere=>iss a pulsgeber ![/color]

                  Kommentar


                  • #10
                    so, ich mal wieder.
                    habe jetzt den download-bereich soweit fertig. bis auf das, daß jeder browser die header unterschiedlich interpretiert und auch die ausgabesteuerung nicht eindeutig festzulegen ist.
                    ist echt ne nervige sache.
                    mein download wird über ein pop-up mit ähnlichem code, wie oben schon beschrieben.
                    die datei sende ich readfile() an den browser.
                    problem: pop-up schliesst nicht wieder, obwohl ich keine ausgabe und nix mache.
                    mit fread() funktionierte das, doch leider kann ich das nicht nehmen.
                    hat jemand einen plan wie ich das doofe ding wieder verschwinden lasse?
                    [color=red]musse rühre, musse probiere=>iss a pulsgeber ![/color]

                    Kommentar


                    • #11
                      lass das popup weg
                      Ich denke, also bin ich. - Einige sind trotzdem...

                      Kommentar


                      • #12
                        okay, mach ein besseren vorschlag!

                        includierte datei, welche die komplette file-list anzeigt mit link für download.
                        da soll sich aber nix ändern, die liste bleibt stehen.
                        [color=red]musse rühre, musse probiere=>iss a pulsgeber ![/color]

                        Kommentar

                        Lädt...
                        X