Come ottengo la dimensione di un file allegato?

18 ago 2010, 12:11:08
Visualizzazioni: 55.4K
Voti: 40

Sto usando il seguente codice template per visualizzare i link degli allegati:

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

ma dopo il link ho bisogno di visualizzare la dimensione del file. Come posso farlo?

Immagino che potrei determinare il percorso del file (tramite wp_upload_dir() e un substr() di wp_get_attachment_url()) e chiamare filesize() ma sembra disordinato, e mi chiedo se esista un metodo integrato in WordPress.

1
Commenti

Interessante notare che non c'è alcuna funzionalità nel backend per visualizzare la dimensione di un file, né nella visualizzazione dettagliata né in quella a elenco. Ticket #8739

hakre hakre
19 ago 2010 09:44:00
Tutte le risposte alla domanda 9
3
49

Per quanto ne so, WordPress non ha nulla di integrato per questo, farei semplicemente:

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

18 ago 2010 12:17:00
Commenti

Ah - sembra molto meglio che pasticciare con wp_upload_dir() ecc.!

Bobby Jack Bobby Jack
18 ago 2010 12:18:52

ho bisogno di ottenere solo la dimensione del file di un allegato del post. ho usato get_the_ID() in post_parent. ma non funziona.

KarSho KarSho
28 mar 2013 13:20:16

Questo è buono, ma attenzione che filesize genererà un warning se get_attached_file restituisce false. Dovresti aggiungere un controllo per assicurarti che get_attached_file restituisca un file esistente.

Alex Standiford Alex Standiford
7 dic 2019 14:53:45
0
13

Farei così:

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

Oppure con dimensioni leggibili come 423.82 KB

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

Riferimenti: get_attached_file(), filesize(), size_format()

Nota: Definisci il tuo $attachment_id

27 mar 2017 14:01:25
2
10

Ho utilizzato questa funzione in functions.php per visualizzare la dimensione del file in un formato facilmente leggibile:

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 poi nel mio template:

echo getSize('inserisci qui il riferimento al file');
19 ago 2010 06:16:18
Commenti

Non è necessario creare una nuova funzione. WP ne ha già due integrate nel core. size_format() e wp_convert_bytes_to_hr()

Scott Scott
27 ott 2011 17:01:33

Sembra che wp_convert_bytes_to_hr() sia ora deprecata a favore di size_format()

davemac davemac
14 mag 2012 05:35:11
2

Esiste una soluzione più semplice per ottenere dimensioni di file leggibili dall'uomo.

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

echo $attachment_meta['filesizeHumanReadable'];
17 gen 2017 10:39:51
Commenti

c'è una funzione wp_ per tutto ;-)

Thomas Fellinger Thomas Fellinger
6 nov 2017 11:13:49

Dovrebbe essere la risposta accettata

user1676224 user1676224
16 gen 2019 18:34:57
0

Per ottenere la dimensione di un file aggiunto tramite il plugin dei campi personalizzati, ho fatto così:

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

Assicurati solo di impostare il "Valore di Ritorno" del campo personalizzato su "Oggetto File".

21 ago 2015 20:33:54
2

Stavo cercando la stessa cosa e ho trovato questa soluzione integrata in 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'];
}

Vedi di più su wp_get_attachment_metadata()

5 lug 2011 17:17:04
Commenti

La domanda riguarda la dimensione del file in termini di numero di byte, non le dimensioni dell'immagine.

Rarst Rarst
5 lug 2011 17:26:26

Ops, ho letto male. :-)

Vayu Vayu
26 ago 2011 15:57:05
0

Per l'audio almeno, la dimensione del file è salvata come "metadata".

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

Questo potrebbe non essere il caso per immagini e video.

27 mag 2017 16:47:52
3

Ottenere la dimensione del file immagine in 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 ott 2021 09:55:11
Commenti

Benvenuto su wpse! In che modo questo approccio è migliore della risposta accettata? Considera di aggiungere ulteriori spiegazioni su come/perché questo approccio sia migliore o come risolva il problema dell'OP.

Buttered_Toast Buttered_Toast
27 ott 2021 10:42:48

La tua risposta potrebbe essere migliorata con informazioni aggiuntive di supporto. Per favore [modifica] per aggiungere ulteriori dettagli, come citazioni o documentazione, in modo che altri possano confermare che la tua risposta sia corretta. Puoi trovare maggiori informazioni su come scrivere buone risposte nel centro assistenza.

User User
27 ott 2021 10:53:37

Questo approccio sembra di gran lunga superiore, ovvero utilizzare get_headers invece della funzione filesize di php. Questo metodo con get_headers non genera l'errore 'stat failed' se la dimensione del file è mancante.

Leora Deans Leora Deans
22 gen 2022 01:20:23
0

Funzione semplice per ottenere la dimensione del file di un allegato tramite l'ID dell'allegato, simile a un'altra risposta qui ma con un po' di controllo degli errori. C'è anche un parametro aggiuntivo per specificare il numero di decimali da restituire:

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

Per esempio, supponiamo di avere un allegato con ID 99: tm_get_attachment_size(99, 1) restituirebbe '1.4 MB'.

3 mar 2021 23:15:06