Make WordPress Core

Changeset 52932


Ignore:
Timestamp:
03/14/2022 04:30:35 PM (3 years ago)
Author:
hellofromTonya
Message:

Media: Relocate wp_filesize() function for use in frontend and backend.

A new function wp_filesize() was added with [52837]. The function lived in the wp-admin/includes/file.php file. However, this admin specific function is not loaded into memory when hitting media/edit endpoint. The result was a 500 Internal Server Error. Why? The function is invoked with that endpoint, but the function does not exist in memory.

This commit relocates the new function to the wp-includes/functions.php file. In doing so, the function is available for both the frontend and backend.

Follow-up to [52837].

Props talldanwp, spacedmonkey, costdev, antonvlasenko.
Fixes #55367.

Location:
trunk
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-admin/includes/file.php

    r52837 r52932  
    25562556    return false;
    25572557}
    2558 
    2559 /**
    2560  * Wrapper for PHP filesize with filters and casting the result as an integer.
    2561  *
    2562  * @since 6.0.0
    2563  *
    2564  * @link https://www.php.net/manual/en/function.filesize.php
    2565  *
    2566  * @param string $path Path to the file.
    2567  * @return int The size of the file in bytes, or 0 in the event of an error.
    2568  */
    2569 function wp_filesize( $path ) {
    2570     /**
    2571      * Filters the result of wp_filesize before the PHP function is run.
    2572      *
    2573      * @since 6.0.0
    2574      *
    2575      * @param null|int $size The unfiltered value. Returning an int from the callback bypasses the filesize call.
    2576      * @param string   $path Path to the file.
    2577      */
    2578     $size = apply_filters( 'pre_wp_filesize', null, $path );
    2579 
    2580     if ( is_int( $size ) ) {
    2581         return $size;
    2582     }
    2583 
    2584     $size = (int) @filesize( $path );
    2585 
    2586     /**
    2587      * Filters the size of the file.
    2588      *
    2589      * @since 6.0.0
    2590      *
    2591      * @param int    $size The result of PHP filesize on the file.
    2592      * @param string $path Path to the file.
    2593      */
    2594     return (int) apply_filters( 'wp_filesize', $size, $path );
    2595 }
  • trunk/src/wp-includes/functions.php

    r52929 r52932  
    34603460
    34613461/**
     3462 * Wrapper for PHP filesize with filters and casting the result as an integer.
     3463 *
     3464 * @since 6.0.0
     3465 *
     3466 * @link https://www.php.net/manual/en/function.filesize.php
     3467 *
     3468 * @param string $path Path to the file.
     3469 * @return int The size of the file in bytes, or 0 in the event of an error.
     3470 */
     3471function wp_filesize( $path ) {
     3472    /**
     3473     * Filters the result of wp_filesize before the PHP function is run.
     3474     *
     3475     * @since 6.0.0
     3476     *
     3477     * @param null|int $size The unfiltered value. Returning an int from the callback bypasses the filesize call.
     3478     * @param string   $path Path to the file.
     3479     */
     3480    $size = apply_filters( 'pre_wp_filesize', null, $path );
     3481
     3482    if ( is_int( $size ) ) {
     3483        return $size;
     3484    }
     3485
     3486    $size = (int) @filesize( $path );
     3487
     3488    /**
     3489     * Filters the size of the file.
     3490     *
     3491     * @since 6.0.0
     3492     *
     3493     * @param int    $size The result of PHP filesize on the file.
     3494     * @param string $path Path to the file.
     3495     */
     3496    return (int) apply_filters( 'wp_filesize', $size, $path );
     3497}
     3498
     3499/**
    34623500 * Retrieve list of allowed mime types and file extensions.
    34633501 *
  • trunk/tests/phpunit/tests/file.php

    r52837 r52932  
    263263        return $keys;
    264264    }
    265 
    266     /**
    267      * @ticket 49412
    268      * @covers ::wp_filesize
    269      */
    270     function test_wp_filesize_with_nonexistent_file() {
    271         $file = 'nonexistent/file.jpg';
    272         $this->assertEquals( 0, wp_filesize( $file ) );
    273     }
    274 
    275     /**
    276      * @ticket 49412
    277      * @covers ::wp_filesize
    278      */
    279     function test_wp_filesize() {
    280         $file = DIR_TESTDATA . '/images/test-image-upside-down.jpg';
    281 
    282         $this->assertEquals( filesize( $file ), wp_filesize( $file ) );
    283 
    284         $filter = function() {
    285             return 999;
    286         };
    287 
    288         add_filter( 'wp_filesize', $filter );
    289 
    290         $this->assertEquals( 999, wp_filesize( $file ) );
    291 
    292         $pre_filter = function() {
    293             return 111;
    294         };
    295 
    296         add_filter( 'pre_wp_filesize', $pre_filter );
    297 
    298         $this->assertEquals( 111, wp_filesize( $file ) );
    299     }
    300265}
  • trunk/tests/phpunit/tests/functions.php

    r52328 r52932  
    21072107        $this->assertFalse( wp_get_default_extension_for_mime_type( null ), 'false not returned when null as mime type supplied' );
    21082108    }
     2109
     2110    /**
     2111     * @ticket 49412
     2112     * @covers ::wp_filesize
     2113     */
     2114    function test_wp_filesize_with_nonexistent_file() {
     2115        $file = 'nonexistent/file.jpg';
     2116        $this->assertEquals( 0, wp_filesize( $file ) );
     2117    }
     2118
     2119    /**
     2120     * @ticket 49412
     2121     * @covers ::wp_filesize
     2122     */
     2123    function test_wp_filesize() {
     2124        $file = DIR_TESTDATA . '/images/test-image-upside-down.jpg';
     2125
     2126        $this->assertEquals( filesize( $file ), wp_filesize( $file ) );
     2127
     2128        $filter = function() {
     2129            return 999;
     2130        };
     2131
     2132        add_filter( 'wp_filesize', $filter );
     2133
     2134        $this->assertEquals( 999, wp_filesize( $file ) );
     2135
     2136        $pre_filter = function() {
     2137            return 111;
     2138        };
     2139
     2140        add_filter( 'pre_wp_filesize', $pre_filter );
     2141
     2142        $this->assertEquals( 111, wp_filesize( $file ) );
     2143    }
    21092144}
Note: See TracChangeset for help on using the changeset viewer.