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.