Как получить размер файла вложения?

18 авг. 2010 г., 12:11:08
Просмотры: 55.4K
Голосов: 40

Я использую следующий код шаблона для отображения ссылок на вложения:

$args = array(
    'post_type' => 'attachment',
    'numberposts' => -1,
    'post_status' => null,
    'post_parent' => $main_post_id
);

$attachments = get_posts($args);

foreach ($attachments as $attachment)
{
    the_attachment_link($attachment->ID, false);
}

но после ссылки мне нужно отобразить размер файла. Как это можно сделать?

Я предполагаю, что мог бы определить путь к файлу (через wp_upload_dir() и substr() от wp_get_attachment_url()) и вызвать filesize(), но это выглядит неаккуратно, и я просто хочу узнать, есть ли встроенный метод в WordPress.

1
Комментарии

Интересно, что в бэкенде нет функциональности для отображения размера файла, ни в деталях, ни в списке. Тикет #8739

hakre hakre
19 авг. 2010 г. 09:44:00
Все ответы на вопрос 9
3
49

Насколько я знаю, в WordPress нет встроенной функции для этого, я бы просто использовал:

filesize( get_attached_file( $attachment->ID ) );

18 авг. 2010 г. 12:17:00
Комментарии

Ах - это выглядит намного лучше, чем возиться с wp_upload_dir() и т.д.!

Bobby Jack Bobby Jack
18 авг. 2010 г. 12:18:52

мне нужно получить размер файла только одного вложения записи. я использовал get_the_ID() в post_parent. но безрезультатно.

KarSho KarSho
28 мар. 2013 г. 13:20:16

Это хорошо, но имейте в виду, что filesize выдаст предупреждение, если get_attached_file вернет false. Вам следует добавить проверку, чтобы убедиться, что get_attached_file возвращает существующий файл.

Alex Standiford Alex Standiford
7 дек. 2019 г. 14:53:45
0
13

Я бы сделал так:

$attachment_filesize = filesize( get_attached_file( $attachment_id ) );

Или с читаемым размером, например 423.82 KB

$attachment_filesize = size_format( filesize( get_attached_file( $attachment_id ) ), 2 );

Ссылки: get_attached_file(), filesize(), size_format()

Примечание: Определите ваш $attachment_id

27 мар. 2017 г. 14:01:25
2
10

Я использовал этот код в functions.php для отображения размера файла в удобочитаемом формате:

function getSize($file){
$bytes = filesize($file);
$s = array('б', 'Кб', 'Мб', 'Гб');
$e = floor(log($bytes)/log(1024));
return sprintf('%.2f '.$s[$e], ($bytes/pow(1024, floor($e))));}

Затем в моем шаблоне:

echo getSize('укажите ссылку на файл здесь');
19 авг. 2010 г. 06:16:18
Комментарии

Нет необходимости создавать новую функцию. В WordPress уже есть две встроенные функции для этого: size_format() и wp_convert_bytes_to_hr()

Scott Scott
27 окт. 2011 г. 17:01:33

Похоже, что функция wp_convert_bytes_to_hr() теперь объявлена устаревшей в пользу size_format()

davemac davemac
14 мая 2012 г. 05:35:11
2

Существует более простое решение для получения размера файла в удобочитаемом формате.

$attachment_id  = $attachment->ID;
$attachment_meta = wp_prepare_attachment_for_js($attachment_id);

echo $attachment_meta['filesizeHumanReadable'];
17 янв. 2017 г. 10:39:51
Комментарии

в WordPress для всего есть функция wp_ ;-)

Thomas Fellinger Thomas Fellinger
6 нояб. 2017 г. 11:13:49

Должен быть принятым ответом

user1676224 user1676224
16 янв. 2019 г. 18:34:57
0

Чтобы узнать размер файла, добавленного через плагин произвольных полей, я сделал следующее:

$fileObject = get_field( 'file' );
$fileSize   = size_format( filesize( get_attached_file( $fileObject['id'] ) ) );

Убедитесь, что для произвольного поля установлено значение "Возвращаемое значение" как "Объект файла".

21 авг. 2015 г. 20:33:54
2

Я искал то же самое и нашел встроенное решение в WordPress.

$args = array(
    'post_type' => 'attachment',
    'numberposts' => -1,
    'post_status' => null,
    'post_parent' => $main_post_id
);

$attachments = get_posts($args);

foreach ($attachments as $attachment)
{
    $attachment_id = $attachment->ID;
    $image_metadata = wp_get_attachment_metadata( $attachment_id );
    the_attachment_link($attachment->ID, false);
    echo the_attachment_link['width'];
    echo the_attachment_link['height'];
}

Подробнее смотрите в wp_get_attachment_metadata()

5 июл. 2011 г. 17:17:04
Комментарии

Вопрос касается размера файла в байтах, а не его размеров в пикселях.

Rarst Rarst
5 июл. 2011 г. 17:26:26

Ой, я неправильно понял. :-)

Vayu Vayu
26 авг. 2011 г. 15:57:05
0

Для аудиофайлов, по крайней мере, размер файла сохраняется как "метаданные".

$metadata = wp_get_attachment_metadata( $attachment_id );
echo $metadata['filesize'];

Для изображений и видео это может не работать.

27 мая 2017 г. 16:47:52
3

Получение размера файла изображения в WordPress:

$query_images_args = array(
    'post_type' => 'attachment', // Тип записи - вложение
    'post_mime_type' => 'image', // Только файлы изображений
    'post_status' => 'inherit',  // Статус записи - наследуемый
    'posts_per_page' => 10,      // Количество изображений за запрос
);

$query_images = new WP_Query($query_images_args);

foreach ($query_images->posts as $image) {
    $img_atts = wp_get_attachment_image_src($image->ID, $default);
    $img = get_headers($img_atts[0], 1);
    $size = $img["Content-Length"]/1024; // Получаем размер в КБ
    echo round($size); // Выводим округлённое значение
}
27 окт. 2021 г. 09:55:11
Комментарии

Добро пожаловать в wpse! Чем этот подход лучше принятого ответа? Рассмотрите возможность добавить больше объяснений о том, как/почему этот подход лучше или как он решает проблему автора вопроса.

Buttered_Toast Buttered_Toast
27 окт. 2021 г. 10:42:48

Ваш ответ можно улучшить, добавив дополнительную подтверждающую информацию. Пожалуйста, [отредактируйте], чтобы добавить больше деталей, таких как ссылки или документация, чтобы другие могли подтвердить, что ваш ответ правильный. Вы можете найти больше информации о том, как писать хорошие ответы, в справочном центре.

User User
27 окт. 2021 г. 10:53:37

Этот способ кажется намного лучше, т.е. использование get_headers вместо функции php filesize. Этот подход с get_headers не вызывает ошибку 'stat failed', если размер файла отсутствует.

Leora Deans Leora Deans
22 янв. 2022 г. 01:20:23
0

Простая функция для получения размера файла вложения по его ID, аналогично другому ответу здесь, но с небольшой проверкой на ошибки. Также добавлен дополнительный параметр для указания количества знаков после запятой:

function tm_get_attachment_size($attachment_id, $decimals) {
    $file = get_attached_file( $attachment_id );
    return $file ? size_format( filesize($file), $decimals ) : 0;
}

Например, если у меня есть вложение с ID 99: tm_get_attachment_size(99, 1) вернет '1.4 MB'.

3 мар. 2021 г. 23:15:06