web-dev-qa-db-fra.com

Comment vérifier l'espace disque utilisé par la bibliothèque multimédia

Existe-t-il un moyen de savoir combien d’espace disque a été utilisé par la bibliothèque multimédia? Les fichiers multimédias de mon blog sont stockés dans un dossier distinct nommé "média" plutôt que "wp-content/uploads" par défaut.

Merci

1
XeBii

En utilisant this StackOverflow Answer , je suis arrivé avec un widget Dashboard qui affiche les éléments suivants:
Folder Sizes Dashboard Widget

J'ai étendu la demande OP pour la taille de répertoire uploads (emplacement par défaut ou personnalisé) et ajouté wp-content (par défaut ou personnalisé), blogs.dir cas dans multisite et répertoire de base WordPress.

<?php
/*
Plugin Name: Folder Sizes Dashboard Widget
Plugin URI: http://wordpress.stackexchange.com/q/67876/12615
Description: List the following folder sizes in a Dashboard Widget: Uploads dir, WP Content dir, WordPress base dir. 
Observation: PHP folder size functions from this Answer: https://stackoverflow.com/a/8348396/1287812
*/

add_action( 'wp_dashboard_setup', 'wpse_67876_wp_dashboard_setup' );

function wpse_67876_wp_dashboard_setup() 
{
    // Admins only
    if( current_user_can( 'install_plugins' ) )
        wp_add_dashboard_widget( 'wpse_67876_folder_sizes', __( 'Folder Sizes' ), 'wpse_67876_wp_add_dashboard_widget' );
}

function wpse_67876_wp_add_dashboard_widget() 
{
    $upload_dir     = wp_upload_dir(); 
    $upload_space   = wpse_67876_foldersize( $upload_dir['basedir'] );
    $content_space  = wpse_67876_foldersize( WP_CONTENT_DIR );
    $wp_space       = wpse_67876_foldersize( ABSPATH );

    /* ABSOLUTE paths not being shown in Widget */

    // echo '<b>' . $upload_dir['basedir'] . ' </b><br />';
    echo '<i>Uploads</i>: ' . wpse_67876_format_size( $upload_space ) . '<br /><br />';

    // echo '<b>' . WP_CONTENT_DIR . ' </b><br />';
    echo '<i>wp-content</i>: ' . wpse_67876_format_size( $content_space ) . '<br /><br />';  

    if( is_multisite() )
    {
        echo '<i>wp-content/blogs.dir</i>: ' . wpse_67876_format_size( wpse_67876_foldersize( WP_CONTENT_DIR . '/blogs.dir' ) ) . '<br /><br />';  
    }

    // echo '<b>' . ABSPATH . ' </b><br />';
    echo '<i>WordPress</i>: ' . wpse_67876_format_size( $wp_space );    
}



function wpse_67876_foldersize( $path ) 
{
    $total_size = 0;
    $files = scandir( $path );
    $cleanPath = rtrim( $path, '/' ) . '/';

    foreach( $files as $t ) {
        if ( '.' != $t && '..' != $t ) 
        {
            $currentFile = $cleanPath . $t;
            if ( is_dir( $currentFile ) ) 
            {
                $size = wpse_67876_foldersize( $currentFile );
                $total_size += $size;
            }
            else 
            {
                $size = filesize( $currentFile );
                $total_size += $size;
            }
        }   
    }

    return $total_size;
}

function wpse_67876_format_size($size) 
{
    $units = explode( ' ', 'B KB MB GB TB PB' );

    $mod = 1024;

    for ( $i = 0; $size > $mod; $i++ )
        $size /= $mod;

    $endIndex = strpos( $size, "." ) + 3;

    return substr( $size, 0, $endIndex ) . ' ' . $units[$i];
}

PS: Je suppose que la fonction foldersize est optimisée pour la performance demandée par StackOverflow OP, mais je ne suis pas sûr ...

4
brasofilo

J'ai utilisé la même méthode récursive moi-même. Il additionne l'espace utilisé et compte bien le nombre de fichiers. Mais sur le site WP-MU que je gère, de nombreux utilisateurs ont alloué jusqu'à 1 Go d'espace disque et plus de 10 000 fichiers. Pour pouvoir facturer la bonne somme, mon système doit effectuer des analyses périodiques du disque. Sur ces gros comptes, il semble que le traitement dépasse les limites de traitement imposées par mon fournisseur de services Internet. Ainsi, lorsque la boucle récursive est terminée, le processus est abandonné et saute la petite partie de finition où l'id de blog, l'espace et la date sont supposés être stockés dans le journal d'utilisation. Ma seule option est alors d’implémenter une logique "petit à petit" ou de mettre à niveau mon hôtel Web. Cela coûte cher et la première option nécessite une programmation que je voudrais éviter.

3
Nils Chr. Svihus