WordPress.org

Make WordPress Core

Ticket #46707: 46707.4.diff

File 46707.4.diff, 9.7 KB (added by azaozz, 8 months ago)
  • src/js/_enqueues/admin/site-health.js

     
    276276                                // Cancel the announcement.
    277277                                window.clearTimeout( timeout );
    278278                        }
     279
     280                        $( document ).trigger( 'site-health-info-dirsizes-done' );
    279281                } );
    280282        }
    281283
  • src/wp-admin/includes/ajax-actions.php

     
    49764976        }
    49774977
    49784978        $sizes_data = WP_Debug_Data::get_sizes();
    4979         $all_sizes  = array();
     4979        $all_sizes  = array( 'raw' => 0 );
    49804980
    49814981        foreach ( $sizes_data as $name => $value ) {
    49824982                $name = sanitize_text_field( $name );
     
    49984998                        }
    49994999                }
    50005000
     5001                if ( ! empty( $value['raw'] ) ) {
     5002                        $data['raw'] = (int) $value['raw'];
     5003                }
     5004
    50015005                $all_sizes[ $name ] = $data;
    50025006        }
    50035007
  • src/wp-admin/includes/class-wp-debug-data.php

     
    392392                $not_calculated = __( 'Not calculated' );
    393393
    394394                $info['wp-paths-sizes']['fields'] = array(
     395                        'wordpress_path'     => array(
     396                                'label' => __( 'WordPress directory location' ),
     397                                'value' => untrailingslashit( ABSPATH ),
     398                        ),
    395399                        'uploads_path'       => array(
    396                                 'label' => __( 'Uploads Directory Location' ),
     400                                'label' => __( 'Uploads directory location' ),
    397401                                'value' => $upload_dir['basedir'],
    398402                        ),
    399403                        'uploads_size'       => array(
    400                                 'label' => __( 'Uploads Directory Size' ),
     404                                'label' => __( 'Uploads directory size' ),
    401405                                'value' => $not_calculated,
    402406                                'debug' => 'not calculated',
    403407                        ),
    404408                        'themes_path'        => array(
    405                                 'label' => __( 'Themes Directory Location' ),
    406                                 'value' => trailingslashit( get_theme_root() ),
     409                                'label' => __( 'Themes directory location' ),
     410                                'value' => get_theme_root(),
    407411                        ),
    408412                        'current_theme_path' => array(
    409                                 'label' => __( 'Current Theme Directory' ),
     413                                'label' => __( 'Current theme directory' ),
    410414                                'value' => get_template_directory(),
    411415                        ),
    412416                        'themes_size'        => array(
    413                                 'label' => __( 'Themes Directory Size' ),
     417                                'label' => __( 'Themes directory size' ),
    414418                                'value' => $not_calculated,
    415419                                'debug' => 'not calculated',
    416420                        ),
    417421                        'plugins_path'       => array(
    418                                 'label' => __( 'Plugins Directory Location' ),
    419                                 'value' => trailingslashit( WP_PLUGIN_DIR ),
     422                                'label' => __( 'Plugins directory location' ),
     423                                'value' => WP_PLUGIN_DIR,
    420424                        ),
    421425                        'plugins_size'       => array(
    422                                 'label' => __( 'Plugins Directory Size' ),
     426                                'label' => __( 'Plugins directory size' ),
    423427                                'value' => $not_calculated,
    424428                                'debug' => 'not calculated',
    425429                        ),
    426                         'wordpress_path'     => array(
    427                                 'label' => __( 'WordPress Directory Location' ),
    428                                 'value' => ABSPATH,
    429                         ),
    430430                        'wordpress_size'     => array(
    431                                 'label' => __( 'WordPress Directory Size' ),
     431                                'label' => __( 'WordPress size' ),
    432432                                'value' => $not_calculated,
    433433                                'debug' => 'not calculated',
    434434                        ),
     
    11371137                }
    11381138
    11391139                // Go through the various installation directories and calculate their sizes.
    1140                 $all_sizes = array(
    1141                         'wordpress_size' => array(
    1142                                 'path' => ABSPATH,
    1143                                 'size' => 0,
    1144                         ),
    1145                         'themes_size'    => array(
    1146                                 'path' => trailingslashit( get_theme_root() ),
    1147                                 'size' => 0,
    1148                         ),
    1149                         'plugins_size'   => array(
    1150                                 'path' => trailingslashit( WP_PLUGIN_DIR ),
    1151                                 'size' => 0,
    1152                         ),
    1153                         'uploads_size'   => array(
    1154                                 'path' => $upload_dir['basedir'],
    1155                                 'size' => 0,
    1156                         ),
     1140                // No trailing slashes.
     1141                $paths = array(
     1142                        'wp_root_dir'  => untrailingslashit( ABSPATH ),
     1143                        'themes_size'  => get_theme_root(),
     1144                        'plugins_size' => WP_PLUGIN_DIR,
     1145                        'uploads_size' => $upload_dir['basedir'],
    11571146                );
    11581147
     1148                $exclude = $paths;
     1149                unset( $exclude['wp_root_dir'] );
     1150                $exclude = array_values( $exclude );
     1151
    11591152                $size_total = 0;
     1153                $all_sizes  = array();
    11601154
    11611155                // Loop over all the directories we want to gather the sizes for.
    1162                 foreach ( $all_sizes as $name => $attributes ) {
     1156                foreach ( $paths as $name => $path ) {
    11631157                        $dir_size = null; // Default to timeout.
     1158                        $results  = array(
     1159                                'path' => $path,
     1160                                'raw'  => 0,
     1161                        );
    11641162
    11651163                        if ( microtime( true ) - WP_START_TIMESTAMP < $max_execution_time ) {
    1166                                 $dir_size = recurse_dirsize( $attributes['path'], null, $max_execution_time );
     1164                                if ( 'wp_root_dir' === $name ) {
     1165                                        $dir_size = recurse_dirsize( $path, $exclude, $max_execution_time );
     1166                                } else {
     1167                                        $dir_size = recurse_dirsize( $path, null, $max_execution_time );
     1168                                }
    11671169                        }
    11681170
    11691171                        if ( false === $dir_size ) {
    11701172                                // Error reading.
    1171                                 $all_sizes[ $name ]['size']  = __( 'The size cannot be calculated. The directory is not accessible. Usually caused by invalid permissions.' );
    1172                                 $all_sizes[ $name ]['debug'] = 'not accessible';
     1173                                $results['size']  = __( 'The size cannot be calculated. The directory is not accessible. Usually caused by invalid permissions.' );
     1174                                $results['debug'] = 'not accessible';
    11731175
    11741176                                // Stop total size calculation.
    11751177                                $size_total = null;
    11761178                        } elseif ( null === $dir_size ) {
    11771179                                // Timeout.
    1178                                 $all_sizes[ $name ]['size']  = __( 'The directory size calculation has timed out. Usually caused by a very large number of sub-directories and files.' );
    1179                                 $all_sizes[ $name ]['debug'] = 'timeout while calculating size';
     1180                                $results['size']  = __( 'The directory size calculation has timed out. Usually caused by a very large number of sub-directories and files.' );
     1181                                $results['debug'] = 'timeout while calculating size';
    11801182
    11811183                                // Stop total size calculation.
    11821184                                $size_total = null;
    11831185                        } else {
    1184                                 $is_subdir = ( strpos( $attributes['path'], ABSPATH ) === 0 );
    1185 
    1186                                 // phpcs:ignore WordPress.WP.CapitalPDangit.Misspelled
    1187                                 if ( null !== $size_total && ( 'wordpress_size' === $name || ! $is_subdir ) ) {
     1186                                if ( null !== $size_total ) {
    11881187                                        $size_total += $dir_size;
    11891188                                }
    11901189
    1191                                 $all_sizes[ $name ]['size']  = size_format( $dir_size, 2 );
    1192                                 $all_sizes[ $name ]['debug'] = $all_sizes[ $name ]['size'];
     1190                                $results['raw']   = $dir_size;
     1191                                $results['size']  = size_format( $dir_size, 2 );
     1192                                $results['debug'] = $results['size'] . " ({$dir_size} bytes)";
    11931193                        }
     1194
     1195                        $all_sizes[ $name ] = $results;
    11941196                }
    11951197
     1198                // Remove the "total size" helper.
     1199                unset( $all_sizes['wp_root_dir'] );
     1200
    11961201                if ( $size_db > 0 ) {
    11971202                        $database_size = size_format( $size_db, 2 );
    11981203
    11991204                        $all_sizes['database_size'] = array(
     1205                                'raw'   => $size_db,
    12001206                                'size'  => $database_size,
    1201                                 'debug' => $database_size,
     1207                                'debug' => $database_size . " ({$size_db} bytes)",
    12021208                        );
    12031209                } else {
    12041210                        $all_sizes['database_size'] = array(
     
    12071213                        );
    12081214                }
    12091215
     1216                if ( null !== $size_total ) {
     1217                        $size_total_mb = size_format( $size_total, 2 );
     1218
     1219                        $all_sizes['wordpress_size'] = array(
     1220                                'raw'   => $size_total,
     1221                                'size'  => $size_total_mb,
     1222                                'debug' => $size_total_mb . " ({$size_total} bytes)",
     1223                        );
     1224                } else {
     1225                        $all_sizes['wordpress_size'] = array(
     1226                                'size'  => __( 'Not available' ),
     1227                                'debug' => 'not available',
     1228                        );
     1229                }
     1230
    12101231                if ( null !== $size_total && $size_db > 0 ) {
    1211                         $total_size = size_format( $size_total + $size_db, 2 );
     1232                        $total_size = $size_total + $size_db;
     1233                        $total_size_mb = size_format( $total_size, 2 );
    12121234
    12131235                        $all_sizes['total_size'] = array(
    1214                                 'size'  => $total_size,
    1215                                 'debug' => $total_size,
     1236                                'raw'   => $total_size,
     1237                                'size'  => $total_size_mb,
     1238                                'debug' => $total_size_mb . " ({$total_size} bytes)",
    12161239                        );
    12171240                } else {
    12181241                        $all_sizes['total_size'] = array(
  • src/wp-includes/functions.php

     
    70677067 * @since 4.3.0 $exclude parameter added.
    70687068 * @since 5.2.0 $max_execution_time parameter added.
    70697069 *
    7070  * @param string $directory Full path of a directory.
    7071  * @param string $exclude   Optional. Full path of a subdirectory to exclude from the total.
    7072  * @param int    $max_execution_time Maximum time to run before giving up. In seconds.
    7073  *                                   The timeout is global and is measured from the moment WordPress started to load.
    7074  * @return int|false|null Size in MB if a valid directory. False if not. Null if timeout.
     7070 * @param string $directory       Full path of a directory.
     7071 * @param string|array $exclude   Optional. Full path of a subdirectory to exclude from the total, or array of paths.
     7072 *                                Expected without trailing slash(es).
     7073 * @param int $max_execution_time Maximum time to run before giving up. In seconds.
     7074 *                                The timeout is global and is measured from the moment WordPress started to load.
     7075 * @return int|false|null Size in bytes if a valid directory. False if not. Null if timeout.
    70757076 */
    70767077function recurse_dirsize( $directory, $exclude = null, $max_execution_time = null ) {
    70777078        $size = 0;
     
    70787079
    70797080        $directory = untrailingslashit( $directory );
    70807081
    7081         if ( ! file_exists( $directory ) || ! is_dir( $directory ) || ! is_readable( $directory ) || $directory === $exclude ) {
     7082        if ( ! file_exists( $directory ) || ! is_dir( $directory ) || ! is_readable( $directory ) ) {
    70827083                return false;
    70837084        }
    70847085
     7086        if (
     7087                ( is_string( $exclude ) && $directory === $exclude ) ||
     7088                ( is_array( $exclude ) && in_array( $directory, $exclude, true ) )
     7089        ) {
     7090                return false;
     7091        }
     7092
    70857093        if ( $max_execution_time === null ) {
    70867094                // Keep the previous behavior but attempt to prevent fatal errors from timeout if possible.
    70877095                if ( function_exists( 'ini_get' ) ) {