Dalej pracujemy z plikami – poznajemy, czym jest glob oraz basename pliku i jak dostać się do jego wielkości. Do dzieła!

Na początek małe coś do formatowania wielkości plików:

class Str {
        public static function formatBytes($bytes, $precision = 2) {
            $kilobyte = 1024;
            $megabyte = $kilobyte * 1024;
            $gigabyte = $megabyte * 1024;
            
            if ($bytes < $kilobyte) {
                return $bytes . ' B';
            } elseif ($bytes < $megabyte) {
                return round($bytes / $kilobyte, $precision) . ' KB';
            } elseif ($bytes < $gigabyte) {
                return round($bytes / $megabyte, $precision) . ' MB';
            } else {
                return round($bytes / $gigabyte, $precision) . ' GB';
            }
        }
    }

Teraz iterujemy po naszym folderze uploads, tylko po plikach png:

foreach (glob(__DIR__ . "/uploads/*.png") as $filename) {
       echo $filename;
    }

Dostajemy pełne, bezwzględne ścieżki do tych plików – nie tego chcemy. Nazwa z rozszerzeniem to właśnie basename:

foreach (glob(__DIR__ . "/uploads/*.png") as $filename) {
        $basename = pathinfo($filename, PATHINFO_BASENAME);
        echo "$basename";
        echo "<br>";
    }

//code.png
//code1.png
//uploaded.png
//uploaded2.png

Zauważmy, że większość funkcji działa na pełnych ścieżkach, choć my lubimy basename wyświetlać:

 foreach (glob(__DIR__ . "/uploads/*.png") as $filename) {
        $basename = pathinfo($filename, PATHINFO_BASENAME);
        echo "$basename, size: " . filesize($filename);
        echo "<br>";
    }

//code.png, size: 1616174
//code1.png, size: 1616174
//uploaded.png, size: 1616174
//uploaded2.png, size: 1616174

Nie zapomnijmy formatować naszych wielkości:

    foreach (glob(__DIR__ . "/uploads/*.png") as $filename) {
        $basename = pathinfo($filename, PATHINFO_BASENAME);
        echo "$basename, size: " . Str::formatBytes(filesize($filename));
        echo "<br>";
    }
    
//code.png, size: 1.54 MB
//code1.png, size: 1.54 MB
//uploaded.png, size: 1.54 MB
//uploaded2.png, size: 1.54 MB

Więcej w następnych lekcjach.