Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Dateigrößen von in einem Array gespeicherten Dateien

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Dateigrößen von in einem Array gespeicherten Dateien

    Hallo,
    Ich bekomme es nicht hin, die Größe von Dateien, die in einem Array gespeichert sind, anzuzeigen. Es gibt bereits eine foreach-Funktion für den array, die über eine mysql abfrage die Anzahl der Downloads abfragt, also müsste wahrscheinlich nur noch ein bisschen code hinzugefügt werden. Bis jetzt habe ich folgenden Code:
    PHP-Code:
    <?php 
        
    foreach($files_array as $key=>$val)
        {
            
    $size filesize $val );
            echo 
    '<li><a href="download.php?file='.urlencode($val).'">'.$val.'
                <span class="download-count" title="Times Downloaded">'
    .(int)$file_downloads[$val].'</span><span class="filesize">'.$size.'</span> <span class="download-label">download</span></a>
            </li>'
    ;
        }
        
    ?>
    Theoretisch müsste es damit ja funktionieren, doch das tut es nicht. Kann mir vielleicht jemand sagen, wo der Fehler liegt?

  • #2
    Theoretisch müsste es damit ja funktionieren, doch das tut es nicht. Kann mir vielleicht jemand sagen, wo der Fehler liegt?


    Mach mal:
    PHP-Code:
    echo file_exists($val); 
    Und schau dir die Ausgabe an.
    cu
    Grüße
    Destruction
    "Dummheit redet viel..Klugheit denkt und schweigt.." [Amgervinus]

    Kommentar


    • #3
      Wie meinst du das? Wenn ich das einfach hinter dem restlichen Code einfüge, passiert nichts (es wird nur wie vorher die liste mit den dateien und die anzahl der downloads angezeigt) und wenn man den restlichen Code löscht, wird gar nichts angezeigt.

      Grüße

      Kommentar


      • #4
        Ich hab noch einen anderen, etwas vereinfachten Lösungsansatz: Hier soll einfach nur der Dateiname und die zugehörige Dateigröße ausgelesen und angezeigt werden. Die Namen erscheinen alle, jedoch wird als Wert für die Dateigröße immer 0 angezeigt.
        PHP-Code:
        <?php

        $files 
        = array ( );
        $dirHandle opendir('demo/files/');
        while ( 
        $currentFile readdir($dirHandle) )
        {
              if ( 
        $currentFile == '.' or $currentFile == '..' )
              {
                 continue;
              }
              
        $files[] = $currentFile;
        }
        sort($files,SORT_STRING);

        $size = array();

        $result filesize ($currentFile);

        while(
        $row=$result)
        {
            
        $size[$row['filename']]=$row['filesize'];
        }


        foreach ( 
        $files as $value )
        {
          
        $size filesize $value );
          echo 
        'Größe der Datei "'.$value.'": '.(int)$size[$value].'<br>';
        }
        ?>

        Kommentar


        • #5
          Bitte poste mal nachvollziehbaren Code.
          Wir können überhaupt nicht erkennen, was in deinem Code
          PHP-Code:
          while($row=$result
          darstellen soll.

          Vermutlich eine Datenbankabfrage ...?

          Aber wieso werden die Dateien aus einem Verzeichnis ausgelesen, die Größe soll aber aus der Datenbank kommen ...? Das sieht doch ziemlich unlogisch aus.

          Also, beschreibe bitte erst mal vernünftig, welche Daten du überhaupt wo her ermitteln möchtest.
          [SIZE="1"]RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?[/SIZE]

          Kommentar


          • #6
            Wir können überhaupt nicht erkennen, was in deinem Code
            PHP-Code:
            while($row=$result)
            darstellen soll.

            Vermutlich eine Datenbankabfrage ...?
            Entschuldigung, ich habe den Code teilweise aus einem Skript mit einer mysql abfrage übernommen. Da funktionierte es ähnlich, es wurden Daten aus einer mysql Datenbank abgerufen und den zugehörigen Dateinamen, die in einem Array gespeichert waren, zugeordnet. Das gehört hier natürlich nicht hin, ich dachte nur, der Ansatz ginge in die richtige Richtung.

            Also, was ich vorhabe:
            Ich habe einen Ordner mit Dateien. Diese Dateien will ich über ein php-skript sortieren und auflisten. Das geschieht mit folgendem:
            PHP-Code:
            <?php

            $files 
            = array ( );
            $dirHandle opendir('demo/files/');
            while ( 
            $currentFile readdir($dirHandle) )
            {
                  if ( 
            $currentFile == '.' or $currentFile == '..' )
                  {
                     continue;
                  }
                  
            $files[] = $currentFile;
            }
            sort($files,SORT_STRING); #Dateinamen in Array alphabetisch sortieren.
            Nun müsste man als nächstes die Dateigrößen den zugehörigen Dateien zuordnen. Die Größe einer einzelnen Datei wird mit
            PHP-Code:
            $size filesize ($file); 
            ermittelt. Die Frage ist jetzt, wie ich für jede einzelne Datei die Größe zuordne.

            Ein möglicher Ansatz wäre vielleicht folgendes, was ich auf einer anderen Seite gefunden habe, aber damit komme ich auch nicht weiter:
            PHP-Code:
              <?php
              $blumen 
            = array(
                
            "rot"=>"Rose",
                
            "rosa"=>"Tulpe",
                
            "weiss"=>"Nelke",
                
            "gelb"=>"Sonnenblume");
              
            ?>
            ... und dann die Ausgabe mit
            PHP-Code:
            <?php
              
            echo $blumen["rosa"];
              
            ?>
            Bei diesem Beispiel wird auch einem Wert jeweils ein anderer zugewiesen (mehrdimensionale Arrays nennt sich das glaube ich).

            Vielleicht kann man diese beiden Ansätze irgendwie kombinieren. Ich hoffe jetzt ist verständlich was ich vorhabe. Jedoch habe ich keine funktionierende Idee wie man das hinbekommt, auch nach langer Suche im Internet. Kann mir dabei vielleicht jemand helfen?

            Kommentar


            • #7
              Ja, ein mehrdimensionales Array eignet sich dafür ganz gut.

              Wie man es erstellt, durchläuft, ausgibt - siehe Manual und Tutorials; das ist Grundlagenwissen.
              [SIZE="1"]RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?[/SIZE]

              Kommentar


              • #8
                Das Problem ist ja auch überhaupt nicht, ein mehrdimensionales array zu erstellen. Das ist mit
                PHP-Code:
                 <?php
                  $blumen 
                = array(
                    
                "rot"=>"Rose",
                    
                "rosa"=>"Tulpe",
                    
                "weiss"=>"Nelke",
                    
                "gelb"=>"Sonnenblume");
                  
                ?>
                ja auch schon geschehen. Die Ausgabe erfolgt über
                PHP-Code:
                while( list ( $key$val ) = each $files ) )
                {
                    echo 
                $key ': ' $val '<br>';

                Ich verstehe nur nicht, wie man das macht, wenn man Dateinamen in den Array einliest. Ich vermute mal, das würde man in der while-Schleife machen, also wie folgt:
                PHP-Code:
                while ($currentFile readdir($dirHandle))
                {
                      if (
                $currentFile == '.' or $currentFile == '..' or $currentFile == '.htaccess')
                      {
                         continue;
                      }
                      
                $currentFile => filesize($currentFile);
                      
                $files[]=$currentFile;

                Jedoch funktioniert das nicht. In diesem Fall würde ja jedem einzelnen Dateinamen (der in $currentFile zwischengespeichert wird) die Größe zugeordnet werden. Oder liegt das Problem hier daran, dass einfach nur der Dateiname in $currentFile gespeichert wird und die Funktion filesize keinen zugriff mehr auf die Datei hat?

                Kommentar


                • #9
                  Zitat von Quert Beitrag anzeigen
                  Das Problem ist ja auch überhaupt nicht, ein mehrdimensionales array zu erstellen.
                  Doch, das ist offenbar dein Problem.

                  Das gezeigte ist ja nur eine statische Variante - du willst es aber dynamisch erzeugen.

                  Ich verstehe nur nicht, wie man das macht, wenn man Dateinamen in den Array einliest.
                  Du packst die Werte, die du für einen Datensatz auf der zweiten Array-Ebene haben willst, in ein neues Array.
                  Und dann fügst du dieses neue Array in das Über-Array ein.
                  [SIZE="1"]RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?[/SIZE]

                  Kommentar


                  • #10
                    Damit lande ich dann bei dem Problem, wie man überhaupt die Dateigröße der einzelnen Dateien dynamisch ausliest. Eigentlich müsste es ja mit folgendem funktionieren:
                    PHP-Code:
                    $files = array();
                    $dirHandle opendir('demo/files/');
                    while (
                    $currentFile readdir($dirHandle))
                    {
                          if (
                    $currentFile == '.' or $currentFile == '..' or $currentFile == '.htaccess')
                          {
                             continue;
                          }
                          
                    $size=>filesize($currentFile);
                          
                    $files[]=$size;

                    Jedoch wird so überhaupt gar nichts ausgegeben. Von der Logik her müsste es aber stimmen: Es wird von jeder einzelnen Datei die Größe ausgelesen, in die Variable $size geschrieben und der wert wird dem Array hinzugefügt.

                    Kommentar


                    • #11
                      PHP-Code:
                      $dir opendir('files/');
                      while (
                      false !== ($file readdir($dir))) {
                          if (
                      $file != '.' && $file != '..') {
                              
                      $size filesize('files/'.$file);
                              echo 
                      'file ' .  $file ' size:' $size '<hr>';
                          }

                      Kommentar


                      • #12
                        Zitat von Quert Beitrag anzeigen
                        Jedoch wird so überhaupt gar nichts ausgegeben. Von der Logik her müsste es aber stimmen: [...]
                        Nein, tut's nicht, weil du vergessen hast, den Pfad davor zu setzen - dann kann PHP die Datei gar nicht finden, also auch die Information nicht auslesen.

                        Stelle bitte das error_reporting auf E_ALL und display_errors auf on, damit dich PHP auf sowas selber hinweisen kann!
                        [SIZE="1"]RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?[/SIZE]

                        Kommentar


                        • #13
                          Okay, ich habs hinbekommen. Es geht sogar ohne mehrdimensionale Arrays, man kann ja auch über foreach von jeder Datei einzeln die größe auslesen und anzeigen. Hier nochmal das fertige Skript:
                          PHP-Code:
                          <?php
                          $files 
                          = array();
                          $dirHandle opendir('files/');
                          while (
                          $currentFile readdir($dirHandle))
                          {
                                if (
                          $currentFile == '.' or $currentFile == '..' or $currentFile == '.htaccess')
                                {
                                   continue;
                                }
                                
                          $files[]=$currentFile;
                          }

                          foreach(
                          $files as $value)
                              {
                              
                          $size=filesize('files/'.$value);
                                      if(
                          $size >= 1073741824) {
                                          
                          $size $size 1073741824;
                                          
                          $size sprintf("%01.2f"$size) . ' GB';
                                      }
                                      else if(
                          $size >= 1048576) {
                                          
                          $size $size 1048576;
                                          
                          $size sprintf("%01.2f"$size) . ' MB';
                                      } 
                                      else {
                                          
                          $size $size 1024;
                                          
                          $size sprintf("%01.1f"$size) . ' KB';
                                      }
                              echo 
                          $value.', Dateigröße: '.$size.'</br>';
                              }
                          ?>
                          Vielen Dank an alle, die mir dabei geholfen haben

                          Kommentar

                          Lädt...
                          X