WordPress.org

Make WordPress Core

Ticket #46645: 46645.diff

File 46645.diff, 7.4 KB (added by pento, 6 months ago)
  • src/wp-admin/includes/class-wp-debug-data.php

    diff --git a/src/wp-admin/includes/class-wp-debug-data.php b/src/wp-admin/includes/class-wp-debug-data.php
    index 6e82e0b672..af0cd6a7a0 100644
    a b class WP_Debug_Data { 
    348348
    349349                // Loop over all the directories we want to gather the sizes for.
    350350                foreach ( $size_directories as $size => $attributes ) {
    351                         /*
    352                          * We run a helper function with a RecursiveIterator, which
    353                          * may throw an exception if it can't access directories.
    354                          *
    355                          * If a failure is detected we mark the result as inaccurate.
    356                          */
    357                         try {
    358                                 $calculated_size = WP_Debug_data::get_directory_size( $attributes['path'], $max_execution_time, $start_execution_time );
    359 
    360                                 $size_directories[ $size ]['size'] = $calculated_size;
    361 
    362                                 /*
    363                                  * If the size returned is -1, this means execution has
    364                                  * exceeded the maximum execution time, also denoting an
    365                                  * inaccurate value in the end.
    366                                  */
    367                                 if ( -1 === $calculated_size ) {
    368                                         $inaccurate = true;
    369                                 }
    370                         } catch ( Exception $e ) {
    371                                 $inaccurate = true;
    372                         }
     351                        $size_directories[ $size ]['size'] = get_dirsize( $attributes['path'] );
    373352                }
    374353
    375354                $size_db = WP_Debug_Data::get_database_size();
    class WP_Debug_Data { 
    932911                echo '`';
    933912        }
    934913
    935         /**
    936          * Return the size of a directory, including all subdirectories.
    937          *
    938          * @since 5.2.0
    939          *
    940          * @param string     $path                 The directory to check.
    941          * @param string|int $max_execution_time   How long a PHP script can run on this host.
    942          * @param float      $start_execution_time When we started executing this section of the script.
    943          *
    944          * @return int The directory size, in bytes.
    945          */
    946         public static function get_directory_size( $path, $max_execution_time, $start_execution_time ) {
    947                 $size = 0;
    948 
    949                 foreach ( new RecursiveIteratorIterator( new RecursiveDirectoryIterator( $path ) ) as $file ) {
    950                         // Check if the maximum execution time is a value considered "infinite".
    951                         if ( 0 !== $max_execution_time && -1 !== $max_execution_time ) {
    952                                 $runtime = ( microtime( true ) - $start_execution_time );
    953 
    954                                 // If the script has been running as long, or longer, as it is allowed, return a failure message.
    955                                 if ( $runtime >= $max_execution_time ) {
    956                                         return -1;
    957                                 }
    958                         }
    959                         $size += $file->getSize();
    960                 }
    961 
    962                 return $size;
    963         }
    964 
    965914        /**
    966915         * Fetch the total size of all the database tables for the active database user.
    967916         *
  • src/wp-includes/functions.php

    diff --git a/src/wp-includes/functions.php b/src/wp-includes/functions.php
    index 86cdabe7e0..a7b7720086 100644
    a b function wp_direct_php_update_button() { 
    68976897        );
    68986898        echo '</p>';
    68996899}
     6900
     6901/**
     6902 * Get the size of a directory.
     6903 *
     6904 * A helper function that is used primarily to check whether
     6905 * a blog has exceeded its allowed upload space.
     6906 *
     6907 * @since MU (3.0.0)
     6908 *
     6909 * @param string $directory Full path of a directory.
     6910 * @return int Size of the directory in MB.
     6911 */
     6912function get_dirsize( $directory ) {
     6913        $dirsize = get_transient( 'dirsize_cache' );
     6914        if ( is_array( $dirsize ) && isset( $dirsize[ $directory ]['size'] ) ) {
     6915                return $dirsize[ $directory ]['size'];
     6916        }
     6917
     6918        if ( ! is_array( $dirsize ) ) {
     6919                $dirsize = array();
     6920        }
     6921
     6922        // Exclude individual site directories from the total when checking the main site,
     6923        // as they are subdirectories and should not be counted.
     6924        if ( is_main_site() ) {
     6925                $dirsize[ $directory ]['size'] = recurse_dirsize( $directory, $directory . '/sites' );
     6926        } else {
     6927                $dirsize[ $directory ]['size'] = recurse_dirsize( $directory );
     6928        }
     6929
     6930        set_transient( 'dirsize_cache', $dirsize, HOUR_IN_SECONDS );
     6931        return $dirsize[ $directory ]['size'];
     6932}
     6933
     6934/**
     6935 * Get the size of a directory recursively.
     6936 *
     6937 * Used by get_dirsize() to get a directory's size when it contains
     6938 * other directories.
     6939 *
     6940 * @since MU (3.0.0)
     6941 * @since 4.3.0 $exclude parameter added.
     6942 *
     6943 * @param string $directory Full path of a directory.
     6944 * @param string $exclude   Optional. Full path of a subdirectory to exclude from the total.
     6945 * @return int|false Size in MB if a valid directory. False if not.
     6946 */
     6947function recurse_dirsize( $directory, $exclude = null ) {
     6948        $size = 0;
     6949
     6950        $directory = untrailingslashit( $directory );
     6951
     6952        if ( ! file_exists( $directory ) || ! is_dir( $directory ) || ! is_readable( $directory ) || $directory === $exclude ) {
     6953                return false;
     6954        }
     6955
     6956        if ( $handle = opendir( $directory ) ) {
     6957                while ( ( $file = readdir( $handle ) ) !== false ) {
     6958                        $path = $directory . '/' . $file;
     6959                        if ( $file != '.' && $file != '..' ) {
     6960                                if ( is_file( $path ) ) {
     6961                                        $size += filesize( $path );
     6962                                } elseif ( is_dir( $path ) ) {
     6963                                        $handlesize = recurse_dirsize( $path, $exclude );
     6964                                        if ( $handlesize > 0 ) {
     6965                                                $size += $handlesize;
     6966                                        }
     6967                                }
     6968                        }
     6969                }
     6970                closedir( $handle );
     6971        }
     6972        return $size;
     6973}
     6974 No newline at end of file
  • src/wp-includes/ms-functions.php

    diff --git a/src/wp-includes/ms-functions.php b/src/wp-includes/ms-functions.php
    index 5293cd2159..1e661dde24 100644
    a b function get_most_recent_post_of_user( $user_id ) { 
    17771777
    17781778// Misc functions
    17791779
    1780 /**
    1781  * Get the size of a directory.
    1782  *
    1783  * A helper function that is used primarily to check whether
    1784  * a blog has exceeded its allowed upload space.
    1785  *
    1786  * @since MU (3.0.0)
    1787  *
    1788  * @param string $directory Full path of a directory.
    1789  * @return int Size of the directory in MB.
    1790  */
    1791 function get_dirsize( $directory ) {
    1792         $dirsize = get_transient( 'dirsize_cache' );
    1793         if ( is_array( $dirsize ) && isset( $dirsize[ $directory ]['size'] ) ) {
    1794                 return $dirsize[ $directory ]['size'];
    1795         }
    1796 
    1797         if ( ! is_array( $dirsize ) ) {
    1798                 $dirsize = array();
    1799         }
    1800 
    1801         // Exclude individual site directories from the total when checking the main site,
    1802         // as they are subdirectories and should not be counted.
    1803         if ( is_main_site() ) {
    1804                 $dirsize[ $directory ]['size'] = recurse_dirsize( $directory, $directory . '/sites' );
    1805         } else {
    1806                 $dirsize[ $directory ]['size'] = recurse_dirsize( $directory );
    1807         }
    1808 
    1809         set_transient( 'dirsize_cache', $dirsize, HOUR_IN_SECONDS );
    1810         return $dirsize[ $directory ]['size'];
    1811 }
    1812 
    1813 /**
    1814  * Get the size of a directory recursively.
    1815  *
    1816  * Used by get_dirsize() to get a directory's size when it contains
    1817  * other directories.
    1818  *
    1819  * @since MU (3.0.0)
    1820  * @since 4.3.0 $exclude parameter added.
    1821  *
    1822  * @param string $directory Full path of a directory.
    1823  * @param string $exclude   Optional. Full path of a subdirectory to exclude from the total.
    1824  * @return int|false Size in MB if a valid directory. False if not.
    1825  */
    1826 function recurse_dirsize( $directory, $exclude = null ) {
    1827         $size = 0;
    1828 
    1829         $directory = untrailingslashit( $directory );
    1830 
    1831         if ( ! file_exists( $directory ) || ! is_dir( $directory ) || ! is_readable( $directory ) || $directory === $exclude ) {
    1832                 return false;
    1833         }
    1834 
    1835         if ( $handle = opendir( $directory ) ) {
    1836                 while ( ( $file = readdir( $handle ) ) !== false ) {
    1837                         $path = $directory . '/' . $file;
    1838                         if ( $file != '.' && $file != '..' ) {
    1839                                 if ( is_file( $path ) ) {
    1840                                         $size += filesize( $path );
    1841                                 } elseif ( is_dir( $path ) ) {
    1842                                         $handlesize = recurse_dirsize( $path, $exclude );
    1843                                         if ( $handlesize > 0 ) {
    1844                                                 $size += $handlesize;
    1845                                         }
    1846                                 }
    1847                         }
    1848                 }
    1849                 closedir( $handle );
    1850         }
    1851         return $size;
    1852 }
    1853 
    18541780/**
    18551781 * Check an array of MIME types against a whitelist.
    18561782 *