
Всем привет. В этой статье вы научитесь получать информацию о файле и применять полученные знания на практических примерах. И бонусом выведем размер файла. Когда это бывает нужно? Когда вы загружаете файлы с разными расширениями и нужно чтобы визуально они отличались друг от друга. Я имею в виду файлы с разными расширениями. Выглядеть это может примерно так:


Можно посмотреть на демо странице:
Демо
1
2
3
| $url = 'path_to_file';
$parts = pathinfo($url);
var_dump($parts); |
$url = 'path_to_file';
$parts = pathinfo($url);
var_dump($parts);
В итоге получает такой массив:
1
2
3
4
5
| array (size=4)
'dirname' => string '/files' (length=6)
'basename' => string 'file.csv' (length=28)
'extension' => string 'csv' (length=3)
'filename' => string 'file' (length=24) |
array (size=4)
'dirname' => string '/files' (length=6)
'basename' => string 'file.csv' (length=28)
'extension' => string 'csv' (length=3)
'filename' => string 'file' (length=24)
dirname |
Директория файла |
basename |
Название файла |
extension |
Расширение файла |
filename |
Имя файла (без расширения) |
Мы можем пойти чуть дальше и смоделировать ситуацию, когда в директорию загружено несколько файлов, пусть их будет три и мы знаем как называется этот каталог. Файлы: file.png, file.jpg, file.doc
1
2
3
4
5
| $files = scandir($url);
foreach ($files as $file) {
$path = pathinfo($file);
echo $path['basename'].'<br />';
} |
$files = scandir($url);
foreach ($files as $file) {
$path = pathinfo($file);
echo $path['basename'].'<br />';
}
Теперь подготовим иконки для отображения расширений файлов и внутри цикла создадим конструкцию switch case.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
| foreach ($files as $file) {
$path = pathinfo($file);
switch ($path_parts['extension']){
case 'xlsx':
$ind = '/img/icon_xlsx.png';
break;
case 'xls':
$ind = '/img/icon_xls.png';
break;
case 'txt':
$ind = '/img/icon_txt.png';
break;
case 'zip':
$ind = '/img/icon_zip.png';
break;
case 'json':
$ind = '/img/icon_js.png';
break;
case 'csv':
$ind = '/img/icon_csv.png';
break;
case 'docx':
$ind = '/img/icon_doc.png';
break;
case 'pdf':
$ind = '/img/icon_pdf.png';
break;
case 'png':
$ind = '/img/icon_png.png';
break;
case 'jpeg':
$ind = '/img/icon_jpg.png';
break;
case 'jpg':
$ind = '/img/icon_jpg.png';
break;
case 'MP4':
$ind = '/img/icon_mp4.png';
break;
case 'JPG':
$ind = '/img/icon_jpg.png';
break;
default: $ind = '/img/icon_file.png';
}
} |
foreach ($files as $file) {
$path = pathinfo($file);
switch ($path_parts['extension']){
case 'xlsx':
$ind = '/img/icon_xlsx.png';
break;
case 'xls':
$ind = '/img/icon_xls.png';
break;
case 'txt':
$ind = '/img/icon_txt.png';
break;
case 'zip':
$ind = '/img/icon_zip.png';
break;
case 'json':
$ind = '/img/icon_js.png';
break;
case 'csv':
$ind = '/img/icon_csv.png';
break;
case 'docx':
$ind = '/img/icon_doc.png';
break;
case 'pdf':
$ind = '/img/icon_pdf.png';
break;
case 'png':
$ind = '/img/icon_png.png';
break;
case 'jpeg':
$ind = '/img/icon_jpg.png';
break;
case 'jpg':
$ind = '/img/icon_jpg.png';
break;
case 'MP4':
$ind = '/img/icon_mp4.png';
break;
case 'JPG':
$ind = '/img/icon_jpg.png';
break;
default: $ind = '/img/icon_file.png';
}
}
Расширений файлов может быть гораздо больше, я прописал основные, но вы можете загружать в файловую систему только определенные типы файлов. Осталось сделать последний штрих и вывести размер каждого файла. Все в том же цикле после переменной $path пишем:
1
2
3
| $kb = filesize($url.$path['basename']);
echo '<img src="' . $ind . '" width="60" class="file_upload"/>
echo $path['basename'].' - '.round($kb / 1024, 1).'kb<br />'; |
$kb = filesize($url.$path['basename']);
echo '<img src="' . $ind . '" width="60" class="file_upload"/>
echo $path['basename'].' - '.round($kb / 1024, 1).'kb<br />';
На этом все. Теперь вы знаете для чего нужна функция pathinfo. Если остались вопросы или есть какие-то замечания, пишите их в комментариях.
Добавить комментарий