L'accesso a questa funzione è contrassegnato come privato. Ciò significa che non è destinata all'uso da parte degli sviluppatori di plugin o temi, ma solo ad altre funzioni principali. È elencata qui per completezza. Utilizzare invece wp_handle_upload_error.

Gestisce i caricamenti in PHP in WordPress.

Descrizione

Sanifica i nomi dei file, controlla le estensioni per il tipo di mime e sposta il file nella directory appropriata all'interno della directory uploads.

Vedere anche

  • wp_handle_upload_error

Parametri

$file

(stringa[])(Richiesto)Riferimento a un singolo elemento di $_FILES. Richiamare la funzione una volta per ogni file caricato.

$sovrascritte

(array|falso)(Richiesto)Un array di parametri di sovrascrittura per questo file, o il booleano false se non ne viene fornito nessuno.

  • 'upload_error_handler'
    (richiamabile) Funzione da chiamare quando si verifica un errore durante il processo di caricamento. Vedere wp_handle_upload_error().
  • 'unique_filename_callback'
    (richiamabile) Funzione da richiamare quando si determina un nome di file unico per il file. Vedere wp_unique_filename().
  • 'upload_error_strings'
    (stringa[]) Le stringhe che descrivono l'errore indicato in $_FILES[{form field}]['error'].
  • 'test_form'
    (bool) Se testare o meno che l'elemento $_POST['action'] sia quello previsto.
  • 'test_size'
    (bool) Verifica se la dimensione del file è maggiore di zero byte.
  • 'tipo_test'
    (bool) Verifica se il tipo di mime del file è quello previsto.
  • 'mimes'
    (stringa[]) Array di tipi di mime consentiti, codificati dalla regex dell'estensione del file.
$tempo

(stringa)(Richiesto)Ora formattata in 'aaaa/mm'.

$azione

(stringa)(Richiesto)Valore atteso per $_POST['action'].

Ritorno

(stringa[]) In caso di successo, restituisce un array associativo di attributi di file. In caso di fallimento, restituisce $overrides['upload_error_handler']( &$file, $message ) o array( 'error' => $message ).

Fonte

File: wp-admin/includes/file.php

function_wp_handle_upload(&$file,$overrides,$time,$action){// The default error handler.if(!function_exists('wp_handle_upload_error')){functionwp_handle_upload_error(&$file,$message){returnarray('error'=>$message);}}/**
	 * Filters the data for a file before it is uploaded to WordPress.
	 *
	 * The dynamic portion of the hook name, `$action`, refers to the post action.
	 * Possible filter names include:
	 *
	 *  - `wp_handle_sideload_prefilter`
	 *  - `wp_handle_upload_prefilter`
	 *
	 * @since 2.9.0 as 'wp_handle_upload_prefilter'.
	 * @since 4.0.0 Converted to a dynamic hook with `$action`.
	 *
	 * @param string[] $file An array of data for the file. Reference to a single element of `$_FILES`.
	 */$file=apply_filters("{$action}_prefilter",$file);/**
	 * Filters the override parameters for a file before it is uploaded to WordPress.
	 *
	 * The dynamic portion of the hook name, `$action`, refers to the post action.
	 * Possible filter names include:
	 *
	 *  - `wp_handle_sideload_overrides`
	 *  - `wp_handle_upload_overrides`
	 *
	 * @since 5.7.0
	 *
	 * @param array|false $overrides An array of override parameters for this file. Boolean false if none are
	 *                               provided. @see _wp_handle_upload().
	 * @param string[]    $file      An array of data for the file. Reference to a single element of `$_FILES`.
	 */$overrides=apply_filters("{$action}_overrides",$overrides,$file);// You may define your own function and pass the name in $overrides['upload_error_handler'].$upload_error_handler='wp_handle_upload_error';if(isset($overrides['upload_error_handler'])){$upload_error_handler=$overrides['upload_error_handler'];}// 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']){returncall_user_func_array($upload_error_handler,array(&$file,$file['error']));}// Install user overrides. Did we mention that this voids your warranty?// You may define your own function and pass the name in $overrides['unique_filename_callback'].$unique_filename_callback=null;if(isset($overrides['unique_filename_callback'])){$unique_filename_callback=$overrides['unique_filename_callback'];}/*
	 * This may not have originally been intended to be overridable,
	 * but historically has been.
	 */if(isset($overrides['upload_error_strings'])){$upload_error_strings=$overrides['upload_error_strings'];}else{// Courtesy of php.net, the strings that describe the error indicated in $_FILES[{form field}]['error'].$upload_error_strings=array(false,sprintf(/* translators: 1: upload_max_filesize, 2: php.ini */__('The uploaded file exceeds the %1$s directive in %2$s.'),'upload_max_filesize','php.ini'),sprintf(/* translators: %s: MAX_FILE_SIZE */__('The uploaded file exceeds the %s directive that was specified in the HTML form.'),'MAX_FILE_SIZE'),__('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=isset($overrides['test_form'])?$overrides['test_form']:true;$test_size=isset($overrides['test_size'])?$overrides['test_size']:true;// If you override this, you must provide $ext and $type!!$test_type=isset($overrides['test_type'])?$overrides['test_type']:true;$mimes=isset($overrides['mimes'])?$overrides['mimes']:false;// A correct form post will pass this test.if($test_form&&(!isset($_POST['action'])||($_POST['action']!=$action))){returncall_user_func_array($upload_error_handler,array(&$file,__('Invalid form submission.')));}// A successful upload will pass this test. It makes no sense to override this one.if(isset($file['error'])&&$file['error']>0){returncall_user_func_array($upload_error_handler,array(&$file,$upload_error_strings[$file['error']]));}// A properly uploaded file will pass this test. There should be no reason to override this one.$test_uploaded_file='wp_handle_upload'===$action?is_uploaded_file($file['tmp_name']): @is_readable($file['tmp_name']);if(!$test_uploaded_file){returncall_user_func_array($upload_error_handler,array(&$file,__('Specified file failed upload test.')));}$test_file_size='wp_handle_upload'===$action?$file['size']:filesize($file['tmp_name']);// A non-empty file will pass this test.if($test_size&&!($test_file_size>0)){if(is_multisite()){$error_msg=__('File is empty. Please upload something more substantial.');}else{$error_msg=sprintf(/* translators: 1: php.ini, 2: post_max_size, 3: upload_max_filesize */__('File is empty. Please upload something more substantial. This error could also be caused by uploads being disabled in your %1$s file or by %2$s being defined as smaller than %3$s in %1$s.'),'php.ini','post_max_size','upload_max_filesize');}returncall_user_func_array($upload_error_handler,array(&$file,$error_msg));}// 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);$ext=empty($wp_filetype['ext'])?'':$wp_filetype['ext'];$type=empty($wp_filetype['type'])?'':$wp_filetype['type'];$proper_filename=empty($wp_filetype['proper_filename'])?'':$wp_filetype['proper_filename'];// 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')){returncall_user_func_array($upload_error_handler,array(&$file,__('Sorry, this file type is not permitted for security reasons.')));}if(!$type){$type=$file['type'];}}else{$type='';}/*
	 * A writable uploads dir will pass this test. Again, there's no point
	 * overriding this one.
	 */$uploads=wp_upload_dir($time);if(!($uploads&&false===$uploads['error'])){returncall_user_func_array($upload_error_handler,array(&$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";/**
	 * Filters whether to short-circuit moving the uploaded file after passing all checks.
	 *
	 * If a non-null value is returned from the filter, moving the file and any related
	 * error reporting will be completely skipped.
	 *
	 * @since 4.9.0
	 *
	 * @param mixed    $move_new_file If null (default) move the file after the upload.
	 * @param string[] $file          An array of data for a single file.
	 * @param string   $new_file      Filename of the newly-uploaded file.
	 * @param string   $type          Mime type of the newly-uploaded file.
	 */$move_new_file=apply_filters('pre_move_uploaded_file',null,$file,$new_file,$type);if(null===$move_new_file){if('wp_handle_upload'===$action){$move_new_file= @move_uploaded_file($file['tmp_name'],$new_file);}else{// Use copy and unlink because rename breaks streams.// phpcs:ignore WordPress.PHP.NoSilencedErrors.Discouraged$move_new_file= @copy($file['tmp_name'],$new_file);unlink($file['tmp_name']);}if(false===$move_new_file){if(0===strpos($uploads['basedir'],ABSPATH)){$error_path=str_replace(ABSPATH,'',$uploads['basedir']).$uploads['subdir'];}else{$error_path=basename($uploads['basedir']).$uploads['subdir'];}return$upload_error_handler($file,sprintf(/* translators: %s: Destination file path. */__('The uploaded file could not be moved to %s.'),$error_path));}}// Set correct file permissions.$stat=stat(dirname($new_file));$perms=$stat['mode']&0000666;chmod($new_file,$perms);// Compute the URL.$url=$uploads['url']."/$filename";if(is_multisite()){clean_dirsize_cache($new_file);}/**
	 * Filters the data array for the uploaded file.
	 *
	 * @since 2.1.0
	 *
	 * @param array  $upload {
	 *     Array of upload data.
	 *
	 *     @type string $file Filename of the newly-uploaded file.
	 *     @type string $url  URL of the newly-uploaded file.
	 *     @type string $type Mime type of the newly-uploaded file.
	 * }
	 * @param string $context The type of upload action. Values include 'upload' or 'sideload'.
	 */returnapply_filters('wp_handle_upload',array('file'=>$new_file,'url'=>$url,'type'=>$type,),'wp_handle_sideload'===$action?'sideload':'upload');}

Correlato

Utilizzi

Usi Descrizione
wp-admin/includes/file.php:{$action}_overrides

Filtra i parametri di sovrascrittura di un file prima che sia caricato su WordPress.

wp-includes/functions.php: clean_dirsize_cache()

Pulisce la cache delle dimensioni delle cartelle usata da recurse_dirsize().

wp-admin/includes/file.php: pre_move_uploaded_file

Filtra se cortocircuitare lo spostamento del file caricato dopo aver superato tutti i controlli.

wp-admin/includes/file.php:{$action}_prefiltro

Filtra i dati di un file prima che venga caricato su WordPress.

wp-admin/includes/file.php: wp_handle_upload

Filtra l'array di dati per il file caricato.

wp-includes/capabilities.php: current_user_can()

Restituisce se l'utente corrente ha la capacità specificata.

wp-includes/l10n.php: __()

Recupera la traduzione di $testo.

wp-includes/load.php: is_multisite()

Se Multisito è abilitato.

wp-includes/functions.php: wp_check_filetype_and_ext()

Tentativo di determinare il vero tipo di file di un file.

wp-includes/functions.php: wp_upload_dir()

Restituisce un array contenente il percorso e l'URL della cartella di caricamento corrente.

wp-includes/functions.php: wp_unique_filename()

Ottiene un nome di file sanificato e unico per la cartella data.

wp-includes/plugin.php: applica_filtri()

Richiama le funzioni di callback che sono state aggiunte a un gancio per i filtri.

Utilizzato da

Usato da Descrizione
wp-admin/includes/file.php: wp_handle_upload()

Wrapper per _wp_handle_upload().

wp-admin/includes/file.php: wp_handle_sideload()

Wrapper per _wp_handle_upload().

Changelog

Versione Descrizione
4.0.0 Introdotto.