WordPress.org

Make WordPress Core

Ticket #46707: 46707.5.diff

File 46707.5.diff, 9.8 KB (added by azaozz, 4 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                        ),
     399                        'wordpress_size'     => array(
     400                                'label' => __( 'WordPress directory size' ),
     401                                'value' => $not_calculated,
     402                                'debug' => 'not calculated',
     403                        ),
    395404                        'uploads_path'       => array(
    396                                 'label' => __( 'Uploads Directory Location' ),
     405                                'label' => __( 'Uploads directory location' ),
    397406                                'value' => $upload_dir['basedir'],
    398407                        ),
    399408                        'uploads_size'       => array(
    400                                 'label' => __( 'Uploads Directory Size' ),
     409                                'label' => __( 'Uploads directory size' ),
    401410                                'value' => $not_calculated,
    402411                                'debug' => 'not calculated',
    403412                        ),
    404413                        'themes_path'        => array(
    405                                 'label' => __( 'Themes Directory Location' ),
    406                                 'value' => trailingslashit( get_theme_root() ),
     414                                'label' => __( 'Themes directory location' ),
     415                                'value' => get_theme_root(),
    407416                        ),
    408                         'current_theme_path' => array(
    409                                 'label' => __( 'Current Theme Directory' ),
    410                                 'value' => get_template_directory(),
    411                         ),
    412417                        'themes_size'        => array(
    413                                 'label' => __( 'Themes Directory Size' ),
     418                                'label' => __( 'Themes directory size' ),
    414419                                'value' => $not_calculated,
    415420                                'debug' => 'not calculated',
    416421                        ),
    417422                        'plugins_path'       => array(
    418                                 'label' => __( 'Plugins Directory Location' ),
    419                                 'value' => trailingslashit( WP_PLUGIN_DIR ),
     423                                'label' => __( 'Plugins directory location' ),
     424                                'value' => WP_PLUGIN_DIR,
    420425                        ),
    421426                        'plugins_size'       => array(
    422                                 'label' => __( 'Plugins Directory Size' ),
     427                                'label' => __( 'Plugins directory size' ),
    423428                                'value' => $not_calculated,
    424429                                'debug' => 'not calculated',
    425430                        ),
    426                         'wordpress_path'     => array(
    427                                 'label' => __( 'WordPress Directory Location' ),
    428                                 'value' => ABSPATH,
    429                         ),
    430                         'wordpress_size'     => array(
    431                                 'label' => __( 'WordPress Directory Size' ),
    432                                 'value' => $not_calculated,
    433                                 'debug' => 'not calculated',
    434                         ),
    435431                        'database_size'      => array(
    436432                                'label' => __( 'Database size' ),
    437433                                'value' => $not_calculated,
     
    898894                                'label' => __( 'Theme features' ),
    899895                                'value' => implode( ', ', $theme_features ),
    900896                        ),
     897                        'theme_path'     => array(
     898                                'label' => __( 'Theme directory' ),
     899                                'value' => get_template_directory(),
     900                        ),
    901901                );
    902902
    903903                // Populate a list of all themes available in the install.
     
    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                        'wordpress_size' => 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['wordpress_size'] );
     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 ( 'wordpress_size' === $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
    11961198                if ( $size_db > 0 ) {
     
    11971199                        $database_size = size_format( $size_db, 2 );
    11981200
    11991201                        $all_sizes['database_size'] = array(
     1202                                'raw'   => $size_db,
    12001203                                'size'  => $database_size,
    1201                                 'debug' => $database_size,
     1204                                'debug' => $database_size . " ({$size_db} bytes)",
    12021205                        );
    12031206                } else {
    12041207                        $all_sizes['database_size'] = array(
     
    12081211                }
    12091212
    12101213                if ( null !== $size_total && $size_db > 0 ) {
    1211                         $total_size = size_format( $size_total + $size_db, 2 );
     1214                        $total_size = $size_total + $size_db;
     1215                        $total_size_mb = size_format( $total_size, 2 );
    12121216
    12131217                        $all_sizes['total_size'] = array(
    1214                                 'size'  => $total_size,
    1215                                 'debug' => $total_size,
     1218                                'raw'   => $total_size,
     1219                                'size'  => $total_size_mb,
     1220                                'debug' => $total_size_mb . " ({$total_size} bytes)",
    12161221                        );
    12171222                } else {
    12181223                        $all_sizes['total_size'] = array(
  • src/wp-includes/functions.php

     
    70717071 * @since 4.3.0 $exclude parameter added.
    70727072 * @since 5.2.0 $max_execution_time parameter added.
    70737073 *
    7074  * @param string $directory Full path of a directory.
    7075  * @param string $exclude   Optional. Full path of a subdirectory to exclude from the total.
    7076  * @param int    $max_execution_time Maximum time to run before giving up. In seconds.
    7077  *                                   The timeout is global and is measured from the moment WordPress started to load.
    7078  * @return int|false|null Size in MB if a valid directory. False if not. Null if timeout.
     7074 * @param string $directory       Full path of a directory.
     7075 * @param string|array $exclude   Optional. Full path of a subdirectory to exclude from the total, or array of paths.
     7076 *                                Expected without trailing slash(es).
     7077 * @param int $max_execution_time Maximum time to run before giving up. In seconds.
     7078 *                                The timeout is global and is measured from the moment WordPress started to load.
     7079 * @return int|false|null Size in bytes if a valid directory. False if not. Null if timeout.
    70797080 */
    70807081function recurse_dirsize( $directory, $exclude = null, $max_execution_time = null ) {
    70817082        $size = 0;
     
    70827083
    70837084        $directory = untrailingslashit( $directory );
    70847085
    7085         if ( ! file_exists( $directory ) || ! is_dir( $directory ) || ! is_readable( $directory ) || $directory === $exclude ) {
     7086        if ( ! file_exists( $directory ) || ! is_dir( $directory ) || ! is_readable( $directory ) ) {
    70867087                return false;
    70877088        }
    70887089
     7090        if (
     7091                ( is_string( $exclude ) && $directory === $exclude ) ||
     7092                ( is_array( $exclude ) && in_array( $directory, $exclude, true ) )
     7093        ) {
     7094                return false;
     7095        }
     7096
    70897097        if ( $max_execution_time === null ) {
    70907098                // Keep the previous behavior but attempt to prevent fatal errors from timeout if possible.
    70917099                if ( function_exists( 'ini_get' ) ) {