L'accès à cette fonction est marqué comme privé. Cela signifie qu'elle n'est pas destinée à être utilisée par les développeurs de plugins ou de thèmes, uniquement dans les autres fonctions de base. Elle est répertoriée ici par souci d'exhaustivité. Utilisez plutôt wp_handle_upload_error.

Gère les téléchargements PHP dans WordPress.

Description

Sanitizes les noms de fichiers, vérifie les extensions pour le type mime, et déplace le fichier vers le répertoire approprié dans le répertoire uploads.

Voir aussi

  • wp_handle_upload_error

Paramètres

$file

(chaîne de caractères[])(Obligatoire)Référence à un seul élément de $_FILES. Appelez la fonction une fois pour chaque fichier téléchargé.

$overrides

(tableau|faux)(Obligatoire)Un tableau de paramètres de remplacement pour ce fichier, ou le booléen false si aucun n'est fourni.

  • 'upload_error_handler'
    (appelable) Fonction à appeler lorsqu'il y a une erreur pendant le processus de téléchargement. @voir wp_handle_upload_error().
  • 'unique_filename_callback' (appelable)
    (appelable) Fonction à appeler lors de la détermination d'un nom de fichier unique pour le fichier. @voir wp_unique_filename().
  • 'upload_error_strings' (chaîne de caractères)
    (chaîne[]) Les chaînes de caractères qui décrivent l'erreur indiquée dans $_FILES[{form field}]['error'].
  • formulaire_test
    (bool) Si l'on veut tester que le $_POST['action'] est conforme aux attentes.
  • test_size
    (bool) S'il faut tester que la taille du fichier est supérieure à zéro octet.
  • test_type
    (bool) Si l'on veut tester que le type mime du fichier est celui attendu.
  • mimes
    (chaîne[]) Tableau des types de mime autorisés clés par leur extension de fichier regex.
$time

(chaîne de caractères)(Obligatoire)Heure formatée en 'yyyy/mm'.

$action

(chaîne de caractères)(Obligatoire)Valeur attendue pour $_POST['action'].

Retourner

(chaîne de caractères[]) En cas de succès, renvoie un tableau associatif d'attributs de fichiers. En cas d'échec, renvoie $overrides['upload_error_handler']( &$file, $message ) ou array( 'error' => $message ).

Source

Fichier : 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');}

Related

Utilise

Utilisations Description
wp-admin/includes/file.php :{$action}_overrides

Filtre les paramètres de surcharge d'un fichier avant qu'il ne soit téléchargé sur WordPress.

wp-includes/functions.php : clean_dirsize_cache()

Nettoie le cache de taille de répertoire utilisé par recurse_dirsize().

wp-admin/includes/file.php : pre_move_uploaded_file

Filtre s'il faut court-circuiter le déplacement du fichier téléchargé après avoir passé toutes les vérifications.

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

Filtre les données d'un fichier avant qu'il ne soit téléchargé sur WordPress.

wp-admin/includes/file.php : wp_handle_upload

Filtre le tableau de données pour le fichier téléchargé.

wp-includes/capabilities.php : current_user_can()

Renvoie si l'utilisateur actuel a la capacité spécifiée.

wp-includes/l10n.php : __()

Récupère la traduction de $text.

wp-includes/load.php : is_multisite()

Si Multisite est activé.

wp-includes/functions.php : wp_check_filetype_and_ext()

Tentative de détermination du type de fichier réel d'un fichier.

wp-includes/functions.php : wp_upload_dir()

Renvoie un tableau contenant le chemin et l'URL du répertoire de téléchargement actuel.

wp-includes/functions.php : wp_unique_filename()

Obtenir un nom de fichier qui est sanitizé et unique pour le répertoire donné.

wp-includes/plugin.php : apply_filters()

Appelle les fonctions de rappel qui ont été ajoutées à un crochet de filtre.

Utilisé par

Utilisé par Description
wp-admin/includes/file.php : wp_handle_upload()

Wrapper pour _wp_handle_upload().

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

Wrapper pour _wp_handle_upload().

Changelog

Version Description
4.0.0 Introduit.