Edit File by line
/home/zeestwma/ajeebong.../wp-inclu...
File: functions.php
} else {
[2500] Fix | Delete
$dir = ABSPATH . UPLOADS;
[2501] Fix | Delete
}
[2502] Fix | Delete
$url = trailingslashit( $siteurl ) . 'files';
[2503] Fix | Delete
}
[2504] Fix | Delete
}
[2505] Fix | Delete
[2506] Fix | Delete
$basedir = $dir;
[2507] Fix | Delete
$baseurl = $url;
[2508] Fix | Delete
[2509] Fix | Delete
$subdir = '';
[2510] Fix | Delete
if ( get_option( 'uploads_use_yearmonth_folders' ) ) {
[2511] Fix | Delete
// Generate the yearly and monthly directories.
[2512] Fix | Delete
if ( ! $time ) {
[2513] Fix | Delete
$time = current_time( 'mysql' );
[2514] Fix | Delete
}
[2515] Fix | Delete
$y = substr( $time, 0, 4 );
[2516] Fix | Delete
$m = substr( $time, 5, 2 );
[2517] Fix | Delete
$subdir = "/$y/$m";
[2518] Fix | Delete
}
[2519] Fix | Delete
[2520] Fix | Delete
$dir .= $subdir;
[2521] Fix | Delete
$url .= $subdir;
[2522] Fix | Delete
[2523] Fix | Delete
return array(
[2524] Fix | Delete
'path' => $dir,
[2525] Fix | Delete
'url' => $url,
[2526] Fix | Delete
'subdir' => $subdir,
[2527] Fix | Delete
'basedir' => $basedir,
[2528] Fix | Delete
'baseurl' => $baseurl,
[2529] Fix | Delete
'error' => false,
[2530] Fix | Delete
);
[2531] Fix | Delete
}
[2532] Fix | Delete
[2533] Fix | Delete
/**
[2534] Fix | Delete
* Gets a filename that is sanitized and unique for the given directory.
[2535] Fix | Delete
*
[2536] Fix | Delete
* If the filename is not unique, then a number will be added to the filename
[2537] Fix | Delete
* before the extension, and will continue adding numbers until the filename
[2538] Fix | Delete
* is unique.
[2539] Fix | Delete
*
[2540] Fix | Delete
* The callback function allows the caller to use their own method to create
[2541] Fix | Delete
* unique file names. If defined, the callback should take three arguments:
[2542] Fix | Delete
* - directory, base filename, and extension - and return a unique filename.
[2543] Fix | Delete
*
[2544] Fix | Delete
* @since 2.5.0
[2545] Fix | Delete
*
[2546] Fix | Delete
* @param string $dir Directory.
[2547] Fix | Delete
* @param string $filename File name.
[2548] Fix | Delete
* @param callable $unique_filename_callback Callback. Default null.
[2549] Fix | Delete
* @return string New filename, if given wasn't unique.
[2550] Fix | Delete
*/
[2551] Fix | Delete
function wp_unique_filename( $dir, $filename, $unique_filename_callback = null ) {
[2552] Fix | Delete
// Sanitize the file name before we begin processing.
[2553] Fix | Delete
$filename = sanitize_file_name( $filename );
[2554] Fix | Delete
$ext2 = null;
[2555] Fix | Delete
[2556] Fix | Delete
// Initialize vars used in the wp_unique_filename filter.
[2557] Fix | Delete
$number = '';
[2558] Fix | Delete
$alt_filenames = array();
[2559] Fix | Delete
[2560] Fix | Delete
// Separate the filename into a name and extension.
[2561] Fix | Delete
$ext = pathinfo( $filename, PATHINFO_EXTENSION );
[2562] Fix | Delete
$name = pathinfo( $filename, PATHINFO_BASENAME );
[2563] Fix | Delete
[2564] Fix | Delete
if ( $ext ) {
[2565] Fix | Delete
$ext = '.' . $ext;
[2566] Fix | Delete
}
[2567] Fix | Delete
[2568] Fix | Delete
// Edge case: if file is named '.ext', treat as an empty name.
[2569] Fix | Delete
if ( $name === $ext ) {
[2570] Fix | Delete
$name = '';
[2571] Fix | Delete
}
[2572] Fix | Delete
[2573] Fix | Delete
/*
[2574] Fix | Delete
* Increment the file number until we have a unique file to save in $dir.
[2575] Fix | Delete
* Use callback if supplied.
[2576] Fix | Delete
*/
[2577] Fix | Delete
if ( $unique_filename_callback && is_callable( $unique_filename_callback ) ) {
[2578] Fix | Delete
$filename = call_user_func( $unique_filename_callback, $dir, $name, $ext );
[2579] Fix | Delete
} else {
[2580] Fix | Delete
$fname = pathinfo( $filename, PATHINFO_FILENAME );
[2581] Fix | Delete
[2582] Fix | Delete
// Always append a number to file names that can potentially match image sub-size file names.
[2583] Fix | Delete
if ( $fname && preg_match( '/-(?:\d+x\d+|scaled|rotated)$/', $fname ) ) {
[2584] Fix | Delete
$number = 1;
[2585] Fix | Delete
[2586] Fix | Delete
// At this point the file name may not be unique. This is tested below and the $number is incremented.
[2587] Fix | Delete
$filename = str_replace( "{$fname}{$ext}", "{$fname}-{$number}{$ext}", $filename );
[2588] Fix | Delete
}
[2589] Fix | Delete
[2590] Fix | Delete
/*
[2591] Fix | Delete
* Get the mime type. Uploaded files were already checked with wp_check_filetype_and_ext()
[2592] Fix | Delete
* in _wp_handle_upload(). Using wp_check_filetype() would be sufficient here.
[2593] Fix | Delete
*/
[2594] Fix | Delete
$file_type = wp_check_filetype( $filename );
[2595] Fix | Delete
$mime_type = $file_type['type'];
[2596] Fix | Delete
[2597] Fix | Delete
$is_image = ( ! empty( $mime_type ) && str_starts_with( $mime_type, 'image/' ) );
[2598] Fix | Delete
$upload_dir = wp_get_upload_dir();
[2599] Fix | Delete
$lc_filename = null;
[2600] Fix | Delete
[2601] Fix | Delete
$lc_ext = strtolower( $ext );
[2602] Fix | Delete
$_dir = trailingslashit( $dir );
[2603] Fix | Delete
[2604] Fix | Delete
/*
[2605] Fix | Delete
* If the extension is uppercase add an alternate file name with lowercase extension.
[2606] Fix | Delete
* Both need to be tested for uniqueness as the extension will be changed to lowercase
[2607] Fix | Delete
* for better compatibility with different filesystems. Fixes an inconsistency in WP < 2.9
[2608] Fix | Delete
* where uppercase extensions were allowed but image sub-sizes were created with
[2609] Fix | Delete
* lowercase extensions.
[2610] Fix | Delete
*/
[2611] Fix | Delete
if ( $ext && $lc_ext !== $ext ) {
[2612] Fix | Delete
$lc_filename = preg_replace( '|' . preg_quote( $ext ) . '$|', $lc_ext, $filename );
[2613] Fix | Delete
}
[2614] Fix | Delete
[2615] Fix | Delete
/*
[2616] Fix | Delete
* Increment the number added to the file name if there are any files in $dir
[2617] Fix | Delete
* whose names match one of the possible name variations.
[2618] Fix | Delete
*/
[2619] Fix | Delete
while ( file_exists( $_dir . $filename ) || ( $lc_filename && file_exists( $_dir . $lc_filename ) ) ) {
[2620] Fix | Delete
$new_number = (int) $number + 1;
[2621] Fix | Delete
[2622] Fix | Delete
if ( $lc_filename ) {
[2623] Fix | Delete
$lc_filename = str_replace(
[2624] Fix | Delete
array( "-{$number}{$lc_ext}", "{$number}{$lc_ext}" ),
[2625] Fix | Delete
"-{$new_number}{$lc_ext}",
[2626] Fix | Delete
$lc_filename
[2627] Fix | Delete
);
[2628] Fix | Delete
}
[2629] Fix | Delete
[2630] Fix | Delete
if ( '' === "{$number}{$ext}" ) {
[2631] Fix | Delete
$filename = "{$filename}-{$new_number}";
[2632] Fix | Delete
} else {
[2633] Fix | Delete
$filename = str_replace(
[2634] Fix | Delete
array( "-{$number}{$ext}", "{$number}{$ext}" ),
[2635] Fix | Delete
"-{$new_number}{$ext}",
[2636] Fix | Delete
$filename
[2637] Fix | Delete
);
[2638] Fix | Delete
}
[2639] Fix | Delete
[2640] Fix | Delete
$number = $new_number;
[2641] Fix | Delete
}
[2642] Fix | Delete
[2643] Fix | Delete
// Change the extension to lowercase if needed.
[2644] Fix | Delete
if ( $lc_filename ) {
[2645] Fix | Delete
$filename = $lc_filename;
[2646] Fix | Delete
}
[2647] Fix | Delete
[2648] Fix | Delete
/*
[2649] Fix | Delete
* Prevent collisions with existing file names that contain dimension-like strings
[2650] Fix | Delete
* (whether they are subsizes or originals uploaded prior to #42437).
[2651] Fix | Delete
*/
[2652] Fix | Delete
[2653] Fix | Delete
$files = array();
[2654] Fix | Delete
$count = 10000;
[2655] Fix | Delete
[2656] Fix | Delete
// The (resized) image files would have name and extension, and will be in the uploads dir.
[2657] Fix | Delete
if ( $name && $ext && @is_dir( $dir ) && str_contains( $dir, $upload_dir['basedir'] ) ) {
[2658] Fix | Delete
/**
[2659] Fix | Delete
* Filters the file list used for calculating a unique filename for a newly added file.
[2660] Fix | Delete
*
[2661] Fix | Delete
* Returning an array from the filter will effectively short-circuit retrieval
[2662] Fix | Delete
* from the filesystem and return the passed value instead.
[2663] Fix | Delete
*
[2664] Fix | Delete
* @since 5.5.0
[2665] Fix | Delete
*
[2666] Fix | Delete
* @param array|null $files The list of files to use for filename comparisons.
[2667] Fix | Delete
* Default null (to retrieve the list from the filesystem).
[2668] Fix | Delete
* @param string $dir The directory for the new file.
[2669] Fix | Delete
* @param string $filename The proposed filename for the new file.
[2670] Fix | Delete
*/
[2671] Fix | Delete
$files = apply_filters( 'pre_wp_unique_filename_file_list', null, $dir, $filename );
[2672] Fix | Delete
[2673] Fix | Delete
if ( null === $files ) {
[2674] Fix | Delete
// List of all files and directories contained in $dir.
[2675] Fix | Delete
$files = @scandir( $dir );
[2676] Fix | Delete
}
[2677] Fix | Delete
[2678] Fix | Delete
if ( ! empty( $files ) ) {
[2679] Fix | Delete
// Remove "dot" dirs.
[2680] Fix | Delete
$files = array_diff( $files, array( '.', '..' ) );
[2681] Fix | Delete
}
[2682] Fix | Delete
[2683] Fix | Delete
if ( ! empty( $files ) ) {
[2684] Fix | Delete
$count = count( $files );
[2685] Fix | Delete
[2686] Fix | Delete
/*
[2687] Fix | Delete
* Ensure this never goes into infinite loop as it uses pathinfo() and regex in the check,
[2688] Fix | Delete
* but string replacement for the changes.
[2689] Fix | Delete
*/
[2690] Fix | Delete
$i = 0;
[2691] Fix | Delete
[2692] Fix | Delete
while ( $i <= $count && _wp_check_existing_file_names( $filename, $files ) ) {
[2693] Fix | Delete
$new_number = (int) $number + 1;
[2694] Fix | Delete
[2695] Fix | Delete
// If $ext is uppercase it was replaced with the lowercase version after the previous loop.
[2696] Fix | Delete
$filename = str_replace(
[2697] Fix | Delete
array( "-{$number}{$lc_ext}", "{$number}{$lc_ext}" ),
[2698] Fix | Delete
"-{$new_number}{$lc_ext}",
[2699] Fix | Delete
$filename
[2700] Fix | Delete
);
[2701] Fix | Delete
[2702] Fix | Delete
$number = $new_number;
[2703] Fix | Delete
++$i;
[2704] Fix | Delete
}
[2705] Fix | Delete
}
[2706] Fix | Delete
}
[2707] Fix | Delete
[2708] Fix | Delete
/*
[2709] Fix | Delete
* Check if an image will be converted after uploading or some existing image sub-size file names may conflict
[2710] Fix | Delete
* when regenerated. If yes, ensure the new file name will be unique and will produce unique sub-sizes.
[2711] Fix | Delete
*/
[2712] Fix | Delete
if ( $is_image ) {
[2713] Fix | Delete
$output_formats = wp_get_image_editor_output_format( $_dir . $filename, $mime_type );
[2714] Fix | Delete
$alt_types = array();
[2715] Fix | Delete
[2716] Fix | Delete
if ( ! empty( $output_formats[ $mime_type ] ) ) {
[2717] Fix | Delete
// The image will be converted to this format/mime type.
[2718] Fix | Delete
$alt_mime_type = $output_formats[ $mime_type ];
[2719] Fix | Delete
[2720] Fix | Delete
// Other types of images whose names may conflict if their sub-sizes are regenerated.
[2721] Fix | Delete
$alt_types = array_keys( array_intersect( $output_formats, array( $mime_type, $alt_mime_type ) ) );
[2722] Fix | Delete
$alt_types[] = $alt_mime_type;
[2723] Fix | Delete
} elseif ( ! empty( $output_formats ) ) {
[2724] Fix | Delete
$alt_types = array_keys( array_intersect( $output_formats, array( $mime_type ) ) );
[2725] Fix | Delete
}
[2726] Fix | Delete
[2727] Fix | Delete
// Remove duplicates and the original mime type. It will be added later if needed.
[2728] Fix | Delete
$alt_types = array_unique( array_diff( $alt_types, array( $mime_type ) ) );
[2729] Fix | Delete
[2730] Fix | Delete
foreach ( $alt_types as $alt_type ) {
[2731] Fix | Delete
$alt_ext = wp_get_default_extension_for_mime_type( $alt_type );
[2732] Fix | Delete
[2733] Fix | Delete
if ( ! $alt_ext ) {
[2734] Fix | Delete
continue;
[2735] Fix | Delete
}
[2736] Fix | Delete
[2737] Fix | Delete
$alt_ext = ".{$alt_ext}";
[2738] Fix | Delete
$alt_filename = preg_replace( '|' . preg_quote( $lc_ext ) . '$|', $alt_ext, $filename );
[2739] Fix | Delete
[2740] Fix | Delete
$alt_filenames[ $alt_ext ] = $alt_filename;
[2741] Fix | Delete
}
[2742] Fix | Delete
[2743] Fix | Delete
if ( ! empty( $alt_filenames ) ) {
[2744] Fix | Delete
/*
[2745] Fix | Delete
* Add the original filename. It needs to be checked again
[2746] Fix | Delete
* together with the alternate filenames when $number is incremented.
[2747] Fix | Delete
*/
[2748] Fix | Delete
$alt_filenames[ $lc_ext ] = $filename;
[2749] Fix | Delete
[2750] Fix | Delete
// Ensure no infinite loop.
[2751] Fix | Delete
$i = 0;
[2752] Fix | Delete
[2753] Fix | Delete
while ( $i <= $count && _wp_check_alternate_file_names( $alt_filenames, $_dir, $files ) ) {
[2754] Fix | Delete
$new_number = (int) $number + 1;
[2755] Fix | Delete
[2756] Fix | Delete
foreach ( $alt_filenames as $alt_ext => $alt_filename ) {
[2757] Fix | Delete
$alt_filenames[ $alt_ext ] = str_replace(
[2758] Fix | Delete
array( "-{$number}{$alt_ext}", "{$number}{$alt_ext}" ),
[2759] Fix | Delete
"-{$new_number}{$alt_ext}",
[2760] Fix | Delete
$alt_filename
[2761] Fix | Delete
);
[2762] Fix | Delete
}
[2763] Fix | Delete
[2764] Fix | Delete
/*
[2765] Fix | Delete
* Also update the $number in (the output) $filename.
[2766] Fix | Delete
* If the extension was uppercase it was already replaced with the lowercase version.
[2767] Fix | Delete
*/
[2768] Fix | Delete
$filename = str_replace(
[2769] Fix | Delete
array( "-{$number}{$lc_ext}", "{$number}{$lc_ext}" ),
[2770] Fix | Delete
"-{$new_number}{$lc_ext}",
[2771] Fix | Delete
$filename
[2772] Fix | Delete
);
[2773] Fix | Delete
[2774] Fix | Delete
$number = $new_number;
[2775] Fix | Delete
++$i;
[2776] Fix | Delete
}
[2777] Fix | Delete
}
[2778] Fix | Delete
}
[2779] Fix | Delete
}
[2780] Fix | Delete
[2781] Fix | Delete
/**
[2782] Fix | Delete
* Filters the result when generating a unique file name.
[2783] Fix | Delete
*
[2784] Fix | Delete
* @since 4.5.0
[2785] Fix | Delete
* @since 5.8.1 The `$alt_filenames` and `$number` parameters were added.
[2786] Fix | Delete
*
[2787] Fix | Delete
* @param string $filename Unique file name.
[2788] Fix | Delete
* @param string $ext File extension. Example: ".png".
[2789] Fix | Delete
* @param string $dir Directory path.
[2790] Fix | Delete
* @param callable|null $unique_filename_callback Callback function that generates the unique file name.
[2791] Fix | Delete
* @param string[] $alt_filenames Array of alternate file names that were checked for collisions.
[2792] Fix | Delete
* @param int|string $number The highest number that was used to make the file name unique
[2793] Fix | Delete
* or an empty string if unused.
[2794] Fix | Delete
*/
[2795] Fix | Delete
return apply_filters( 'wp_unique_filename', $filename, $ext, $dir, $unique_filename_callback, $alt_filenames, $number );
[2796] Fix | Delete
}
[2797] Fix | Delete
[2798] Fix | Delete
/**
[2799] Fix | Delete
* Helper function to test if each of an array of file names could conflict with existing files.
[2800] Fix | Delete
*
[2801] Fix | Delete
* @since 5.8.1
[2802] Fix | Delete
* @access private
[2803] Fix | Delete
*
[2804] Fix | Delete
* @param string[] $filenames Array of file names to check.
[2805] Fix | Delete
* @param string $dir The directory containing the files.
[2806] Fix | Delete
* @param array $files An array of existing files in the directory. May be empty.
[2807] Fix | Delete
* @return bool True if the tested file name could match an existing file, false otherwise.
[2808] Fix | Delete
*/
[2809] Fix | Delete
function _wp_check_alternate_file_names( $filenames, $dir, $files ) {
[2810] Fix | Delete
foreach ( $filenames as $filename ) {
[2811] Fix | Delete
if ( file_exists( $dir . $filename ) ) {
[2812] Fix | Delete
return true;
[2813] Fix | Delete
}
[2814] Fix | Delete
[2815] Fix | Delete
if ( ! empty( $files ) && _wp_check_existing_file_names( $filename, $files ) ) {
[2816] Fix | Delete
return true;
[2817] Fix | Delete
}
[2818] Fix | Delete
}
[2819] Fix | Delete
[2820] Fix | Delete
return false;
[2821] Fix | Delete
}
[2822] Fix | Delete
[2823] Fix | Delete
/**
[2824] Fix | Delete
* Helper function to check if a file name could match an existing image sub-size file name.
[2825] Fix | Delete
*
[2826] Fix | Delete
* @since 5.3.1
[2827] Fix | Delete
* @access private
[2828] Fix | Delete
*
[2829] Fix | Delete
* @param string $filename The file name to check.
[2830] Fix | Delete
* @param array $files An array of existing files in the directory.
[2831] Fix | Delete
* @return bool True if the tested file name could match an existing file, false otherwise.
[2832] Fix | Delete
*/
[2833] Fix | Delete
function _wp_check_existing_file_names( $filename, $files ) {
[2834] Fix | Delete
$fname = pathinfo( $filename, PATHINFO_FILENAME );
[2835] Fix | Delete
$ext = pathinfo( $filename, PATHINFO_EXTENSION );
[2836] Fix | Delete
[2837] Fix | Delete
// Edge case, file names like `.ext`.
[2838] Fix | Delete
if ( empty( $fname ) ) {
[2839] Fix | Delete
return false;
[2840] Fix | Delete
}
[2841] Fix | Delete
[2842] Fix | Delete
if ( $ext ) {
[2843] Fix | Delete
$ext = ".$ext";
[2844] Fix | Delete
}
[2845] Fix | Delete
[2846] Fix | Delete
$regex = '/^' . preg_quote( $fname ) . '-(?:\d+x\d+|scaled|rotated)' . preg_quote( $ext ) . '$/i';
[2847] Fix | Delete
[2848] Fix | Delete
foreach ( $files as $file ) {
[2849] Fix | Delete
if ( preg_match( $regex, $file ) ) {
[2850] Fix | Delete
return true;
[2851] Fix | Delete
}
[2852] Fix | Delete
}
[2853] Fix | Delete
[2854] Fix | Delete
return false;
[2855] Fix | Delete
}
[2856] Fix | Delete
[2857] Fix | Delete
/**
[2858] Fix | Delete
* Creates a file in the upload folder with given content.
[2859] Fix | Delete
*
[2860] Fix | Delete
* If there is an error, then the key 'error' will exist with the error message.
[2861] Fix | Delete
* If success, then the key 'file' will have the unique file path, the 'url' key
[2862] Fix | Delete
* will have the link to the new file. and the 'error' key will be set to false.
[2863] Fix | Delete
*
[2864] Fix | Delete
* This function will not move an uploaded file to the upload folder. It will
[2865] Fix | Delete
* create a new file with the content in $bits parameter. If you move the upload
[2866] Fix | Delete
* file, read the content of the uploaded file, and then you can give the
[2867] Fix | Delete
* filename and content to this function, which will add it to the upload
[2868] Fix | Delete
* folder.
[2869] Fix | Delete
*
[2870] Fix | Delete
* The permissions will be set on the new file automatically by this function.
[2871] Fix | Delete
*
[2872] Fix | Delete
* @since 2.0.0
[2873] Fix | Delete
*
[2874] Fix | Delete
* @param string $name Filename.
[2875] Fix | Delete
* @param null|string $deprecated Never used. Set to null.
[2876] Fix | Delete
* @param string $bits File content
[2877] Fix | Delete
* @param string|null $time Optional. Time formatted in 'yyyy/mm'. Default null.
[2878] Fix | Delete
* @return array {
[2879] Fix | Delete
* Information about the newly-uploaded file.
[2880] Fix | Delete
*
[2881] Fix | Delete
* @type string $file Filename of the newly-uploaded file.
[2882] Fix | Delete
* @type string $url URL of the uploaded file.
[2883] Fix | Delete
* @type string $type File type.
[2884] Fix | Delete
* @type string|false $error Error message, if there has been an error.
[2885] Fix | Delete
* }
[2886] Fix | Delete
*/
[2887] Fix | Delete
function wp_upload_bits( $name, $deprecated, $bits, $time = null ) {
[2888] Fix | Delete
if ( ! empty( $deprecated ) ) {
[2889] Fix | Delete
_deprecated_argument( __FUNCTION__, '2.0.0' );
[2890] Fix | Delete
}
[2891] Fix | Delete
[2892] Fix | Delete
if ( empty( $name ) ) {
[2893] Fix | Delete
return array( 'error' => __( 'Empty filename' ) );
[2894] Fix | Delete
}
[2895] Fix | Delete
[2896] Fix | Delete
$wp_filetype = wp_check_filetype( $name );
[2897] Fix | Delete
if ( ! $wp_filetype['ext'] && ! current_user_can( 'unfiltered_upload' ) ) {
[2898] Fix | Delete
return array( 'error' => __( 'Sorry, you are not allowed to upload this file type.' ) );
[2899] Fix | Delete
}
[2900] Fix | Delete
[2901] Fix | Delete
$upload = wp_upload_dir( $time );
[2902] Fix | Delete
[2903] Fix | Delete
if ( false !== $upload['error'] ) {
[2904] Fix | Delete
return $upload;
[2905] Fix | Delete
}
[2906] Fix | Delete
[2907] Fix | Delete
/**
[2908] Fix | Delete
* Filters whether to treat the upload bits as an error.
[2909] Fix | Delete
*
[2910] Fix | Delete
* Returning a non-array from the filter will effectively short-circuit preparing the upload bits
[2911] Fix | Delete
* and return that value instead. An error message should be returned as a string.
[2912] Fix | Delete
*
[2913] Fix | Delete
* @since 3.0.0
[2914] Fix | Delete
*
[2915] Fix | Delete
* @param array|string $upload_bits_error An array of upload bits data, or error message to return.
[2916] Fix | Delete
*/
[2917] Fix | Delete
$upload_bits_error = apply_filters(
[2918] Fix | Delete
'wp_upload_bits',
[2919] Fix | Delete
array(
[2920] Fix | Delete
'name' => $name,
[2921] Fix | Delete
'bits' => $bits,
[2922] Fix | Delete
'time' => $time,
[2923] Fix | Delete
)
[2924] Fix | Delete
);
[2925] Fix | Delete
if ( ! is_array( $upload_bits_error ) ) {
[2926] Fix | Delete
$upload['error'] = $upload_bits_error;
[2927] Fix | Delete
return $upload;
[2928] Fix | Delete
}
[2929] Fix | Delete
[2930] Fix | Delete
$filename = wp_unique_filename( $upload['path'], $name );
[2931] Fix | Delete
[2932] Fix | Delete
$new_file = $upload['path'] . "/$filename";
[2933] Fix | Delete
if ( ! wp_mkdir_p( dirname( $new_file ) ) ) {
[2934] Fix | Delete
if ( str_starts_with( $upload['basedir'], ABSPATH ) ) {
[2935] Fix | Delete
$error_path = str_replace( ABSPATH, '', $upload['basedir'] ) . $upload['subdir'];
[2936] Fix | Delete
} else {
[2937] Fix | Delete
$error_path = wp_basename( $upload['basedir'] ) . $upload['subdir'];
[2938] Fix | Delete
}
[2939] Fix | Delete
[2940] Fix | Delete
$message = sprintf(
[2941] Fix | Delete
/* translators: %s: Directory path. */
[2942] Fix | Delete
__( 'Unable to create directory %s. Is its parent directory writable by the server?' ),
[2943] Fix | Delete
$error_path
[2944] Fix | Delete
);
[2945] Fix | Delete
return array( 'error' => $message );
[2946] Fix | Delete
}
[2947] Fix | Delete
[2948] Fix | Delete
$ifp = @fopen( $new_file, 'wb' );
[2949] Fix | Delete
if ( ! $ifp ) {
[2950] Fix | Delete
return array(
[2951] Fix | Delete
/* translators: %s: File name. */
[2952] Fix | Delete
'error' => sprintf( __( 'Could not write file %s' ), $new_file ),
[2953] Fix | Delete
);
[2954] Fix | Delete
}
[2955] Fix | Delete
[2956] Fix | Delete
fwrite( $ifp, $bits );
[2957] Fix | Delete
fclose( $ifp );
[2958] Fix | Delete
clearstatcache();
[2959] Fix | Delete
[2960] Fix | Delete
// Set correct file permissions.
[2961] Fix | Delete
$stat = @ stat( dirname( $new_file ) );
[2962] Fix | Delete
$perms = $stat['mode'] & 0007777;
[2963] Fix | Delete
$perms = $perms & 0000666;
[2964] Fix | Delete
chmod( $new_file, $perms );
[2965] Fix | Delete
clearstatcache();
[2966] Fix | Delete
[2967] Fix | Delete
// Compute the URL.
[2968] Fix | Delete
$url = $upload['url'] . "/$filename";
[2969] Fix | Delete
[2970] Fix | Delete
if ( is_multisite() ) {
[2971] Fix | Delete
clean_dirsize_cache( $new_file );
[2972] Fix | Delete
}
[2973] Fix | Delete
[2974] Fix | Delete
/** This filter is documented in wp-admin/includes/file.php */
[2975] Fix | Delete
return apply_filters(
[2976] Fix | Delete
'wp_handle_upload',
[2977] Fix | Delete
array(
[2978] Fix | Delete
'file' => $new_file,
[2979] Fix | Delete
'url' => $url,
[2980] Fix | Delete
'type' => $wp_filetype['type'],
[2981] Fix | Delete
'error' => false,
[2982] Fix | Delete
),
[2983] Fix | Delete
'sideload'
[2984] Fix | Delete
);
[2985] Fix | Delete
}
[2986] Fix | Delete
[2987] Fix | Delete
/**
[2988] Fix | Delete
* Retrieves the file type based on the extension name.
[2989] Fix | Delete
*
[2990] Fix | Delete
* @since 2.5.0
[2991] Fix | Delete
*
[2992] Fix | Delete
* @param string $ext The extension to search.
[2993] Fix | Delete
* @return string|void The file type, example: audio, video, document, spreadsheet, etc.
[2994] Fix | Delete
*/
[2995] Fix | Delete
function wp_ext2type( $ext ) {
[2996] Fix | Delete
$ext = strtolower( $ext );
[2997] Fix | Delete
[2998] Fix | Delete
$ext2type = wp_get_ext_types();
[2999] Fix | Delete
It is recommended that you Edit text format, this type of Fix handles quite a lot in one request
Function