如何检查介质库使用的磁盘空间

时间:2012-10-11 作者:XeBii

有没有办法知道媒体库使用了多少磁盘空间?我博客的媒体文件存储在一个名为“media”的单独文件夹中,而不是默认的“wp content/uploads”。

谢谢

2 个回复
最合适的回答,由SO网友:brasofilo 整理而成

使用this StackOverflow Answer, 我设计了一个仪表板小部件,显示以下内容:
Folder Sizes Dashboard Widget

我将OP请求扩展到uploads 目录大小(默认或自定义位置)并添加wp-content (默认或自定义),blogs.dir 多站点中的大小写和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:我想foldersize 函数根据StackOverflow OP的要求进行了性能优化,但我不确定

SO网友:Nils Chr. Svihus

我自己也用过同样的递归方法。它将使用的空间相加,并很好地统计文件的数量。但在我管理的WP-MU站点上,许多用户分配了高达1gB以上的磁盘空间和10000多个文件。为了能够收取正确的费用,我的系统必须定期执行磁盘扫描,在这些大客户上,处理似乎超过了我的ISPs处理限制。因此,当紧密递归循环完成后,该过程将退出并跳过小的完成部分,即博客id、空间和日期应该存储在使用日志中的部分。那么,我唯一的选择就是实现“一点一点”的逻辑,或者升级我的网络酒店。这是昂贵的,第一种选择需要一种我希望避免的编程。

结束

相关推荐

Large Uploads in WordPress

我与一家教会合作,该教会使用WordPress管理其网站和播客。到目前为止,他们每周有200个步骤来发布播客(我夸大了,但这是一个庞大的逐步列表)。除其他外,他们必须:录制布道,掌握布道录音,创建MP3,通过FileZilla将MP3上传到他们的服务器,但是如果可以的话,我想简化步骤4-6。我知道一些在线应用程序能够进行非常大的上传(GMail、Dropbox等)。每个布道都有70-80 MB,太大了,无法用简单的HTML上传表单处理。如果我最大限度地限制PHP文件大小,Flash上传程序是否能够管理这样