Como obtenho o tamanho de um arquivo anexo?

32

Estou usando o código de modelo a seguir para exibir links de anexo:

$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);
}

mas depois do link eu preciso mostrar o tamanho do arquivo. Como posso fazer isso?

Eu estou supondo que eu poderia determinar o caminho do arquivo (via wp_upload_dir() e substr() de wp_get_attachment_url() ) e chamar filesize() , mas isso parece confuso, e eu só estou querendo saber se existe um método embutido WordPress.

    
por Bobby Jack 18.08.2010 / 11:11

7 respostas

38

Até onde eu sei, o WordPress não tem nada embutido para isso, eu apenas faria:

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

    
por Joe Hoyle 18.08.2010 / 11:17
10

Eu usei isso antes em functions.php para exibir o tamanho do arquivo em um formato de fácil leitura:

function getSize($file){
$bytes = filesize($file);
$s = array('b', 'Kb', 'Mb', 'Gb');
$e = floor(log($bytes)/log(1024));
return sprintf('%.2f '.$s[$e], ($bytes/pow(1024, floor($e))));}

E, em seguida, no meu modelo:

echo getSize('insert reference to file here');
    
por davemac 19.08.2010 / 05:16
4

Eu faria:

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

Ou com tamanho legível, como 423.82 KB

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

Refs: get_attached_file () , filesize () , size_format ()

Nota: defina o seu $attachment_id

    
por l2aelba 27.03.2017 / 13:01
3

Para encontrar o tamanho de um arquivo adicionado por meio do plug-in de campos personalizados, fiz o seguinte:

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

Apenas certifique-se de definir o "Valor de Retorno" do campo personalizado como "Objeto de Arquivo".

    
por William Schroeder McKinley 21.08.2015 / 19:33
2

Existe uma solução mais fácil para obter tamanhos de arquivo legíveis para humanos.

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

echo $attachment_meta['filesizeHumanReadable'];
    
por Zoltan Kiraly 17.01.2017 / 09:39
1

Eu estava procurando o mesmo e encontrei esta solução incorporada do 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'];
}

Veja mais em wp_get_attachment_metadata()

    
por Vayu 05.07.2011 / 16:17
1

Para áudio, pelo menos, o tamanho do arquivo é salvo como "metadados".

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

Este não pode ser o caso de imagens e vídeo.

    
por henrywright 27.05.2017 / 15:47