Switch language

wpseek.com
A WordPress-centric search engine for devs and theme authors




wp_handle_upload [ WordPress Function ]

wp_handle_upload ( $file, $overrides = false, $time = null )
Parameters:
  • (array) $file Reference to a single element of $_FILES. Call the function once for each uploaded file.
  • (array) $overrides Optional. An associative array of names=>values to override default variables with extract( $overrides, EXTR_OVERWRITE ).
Uses:
Returns:
  • (array) On success, returns an associative array of file attributes. On failure, returns $overrides['upload_error_handler'](&$file, $message ) or array( 'error'=>$message ).
Defined at:



Handle PHP uploads in WordPress, sanitizing file names, checking extensions for mime type, and moving the file to the appropriate directory within the uploads directory.

Source


<?php
function wp_handle_upload( &$file$overrides false$time null ) {
    
// The default error handler.
    
if ( ! function_exists'wp_handle_upload_error' ) ) {
        function 
wp_handle_upload_error( &$file$message ) {
            return array( 
'error'=>$message );
        }
    }

    
$file apply_filters'wp_handle_upload_prefilter'$file );

    
// You may define your own function and pass the name in $overrides['upload_error_handler']
    
$upload_error_handler 'wp_handle_upload_error';

    
// You may have had one or more 'wp_handle_upload_prefilter' functions error out the file. Handle that gracefully.
    
if ( isset( $file['error'] ) && !is_numeric$file['error'] ) && $file['error'] )
        return 
$upload_error_handler$file$file['error'] );

    
// You may define your own function and pass the name in $overrides['unique_filename_callback']
    
$unique_filename_callback null;

    
// $_POST['action'] must be set and its value must equal $overrides['action'] or this:
    
$action 'wp_handle_upload';

    
// Courtesy of php.net, the strings that describe the error indicated in $_FILES[{form field}]['error'].
    
$upload_error_strings = array( false,
        
__"The uploaded file exceeds the upload_max_filesize directive in php.ini." ),
        
__"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form." ),
        
__"The uploaded file was only partially uploaded." ),
        
__"No file was uploaded." ),
        
'',
        
__"Missing a temporary folder." ),
        
__"Failed to write file to disk." ),
        
__"File upload stopped by extension." ));

    
// All tests are on by default. Most can be turned off by $overrides[{test_name}] = false;
    
$test_form true;
    
$test_size true;
    
$test_upload true;

    
// If you override this, you must provide $ext and $type!!!!
    
$test_type true;
    
$mimes false;

    
// Install user overrides. Did we mention that this voids your warranty?
    
if ( is_array$overrides ) )
        
extract$overridesEXTR_OVERWRITE );

    
// A correct form post will pass this test.
    
if ( $test_form && (!isset( $_POST['action'] ) || ($_POST['action'] != $action ) ) )
        return 
call_user_func($upload_error_handler$file__'Invalid form submission.' ));

    
// A successful upload will pass this test. It makes no sense to override this one.
    
if ( $file['error'] > )
        return 
call_user_func($upload_error_handler$file$upload_error_strings[$file['error']] );

    
// A non-empty file will pass this test.
    
if ( $test_size && !($file['size'] > ) ) {
        if ( 
is_multisite() )
            
$error_msg __'File is empty. Please upload something more substantial.' );
        else
            
$error_msg __'File is empty. Please upload something more substantial. This error could also be caused by uploads being disabled in your php.ini or by post_max_size being defined as smaller than upload_max_filesize in php.ini.' );
        return 
call_user_func($upload_error_handler$file$error_msg);
    }

    
// A properly uploaded file will pass this test. There should be no reason to override this one.
    
if ( $test_upload && ! @ is_uploaded_file$file['tmp_name'] ) )
        return 
call_user_func($upload_error_handler$file__'Specified file failed upload test.' ));

    
// A correct MIME type will pass this test. Override $mimes or use the upload_mimes filter.
    
if ( $test_type ) {
        
$wp_filetype wp_check_filetype_and_ext$file['tmp_name'], $file['name'], $mimes );

        
extract$wp_filetype );

        
// Check to see if wp_check_filetype_and_ext() determined the filename was incorrect
        
if ( $proper_filename )
            
$file['name'] = $proper_filename;

        if ( ( !
$type || !$ext ) && !current_user_can'unfiltered_upload' ) )
            return 
call_user_func($upload_error_handler$file__'Sorry, this file type is not permitted for security reasons.' ));

        if ( !
$ext )
            
$ext ltrim(strrchr($file['name'], '.'), '.');

        if ( !
$type )
            
$type $file['type'];
    } else {
        
$type '';
    }

    
// A writable uploads dir will pass this test. Again, there's no point overriding this one.
    
if ( ! ( ( $uploads wp_upload_dir($time) ) && false === $uploads['error'] ) )
        return 
call_user_func($upload_error_handler$file$uploads['error'] );

    
$filename wp_unique_filename$uploads['path'], $file['name'], $unique_filename_callback );

    
// Move the file to the uploads dir
    
$new_file $uploads['path'] . "/$filename";
    if ( 
false === @ move_uploaded_file$file['tmp_name'], $new_file ) )
        return 
$upload_error_handler$filesprintf__('The uploaded file could not be moved to %s.' ), $uploads['path'] ) );

    
// Set correct file permissions
    
$stat statdirname$new_file ));
    
$perms $stat['mode'] & 0000666;
    @ 
chmod$new_file$perms );

    
// Compute the URL
    
$url $uploads['url'] . "/$filename";

    if ( 
is_multisite() )
        
delete_transient'dirsize_cache' );

    return 
apply_filters'wp_handle_upload', array( 'file' => $new_file'url' => $url'type' => $type ), 'upload' );
}
?>

Examples [ wp-snippets.com ]

Top Google zoekresultaten

Meer ...

0 User Note(s)

Nog geen één. Wees de eerste!

Nieuw toevoegen ...



HTML5 Powered with CSS3 / Styling, Performance & Integration, and Semantics