1) Upload par la méthode Post
1-1) Rappel du
principe
Lorsque l'on soumet un formulaire contenant un champ file, le
fichier est tout d'abord transféré du PC client sur le serveur, dans le
répertoire temporaire défini au niveau de la configuration. (Ex avec EasyPhp:
upload_tmp_dir = "C:\Program Files\EasyPHP1-7\tmp\").
Ce fichier doit ensuite
être traité par le script exécuté aprês soumission
du formulaire :
A la fin de l'exécution du script, le
fichier uploadé est systématiquement effacé du répertoire temporaire où il avait
été enregistré initialement.
Celà  signifie 2
choses :
2-2) La variable $_FILES
Supposons que votre formulaire contienne un champ file : <input type='file' name='my_file' >
Lorsqu'un
formulaire contenant un champ 'file' est soumis, le fichier est uploadé, et vous disposez, pour
traiter ce fichier, de la variable $_FILES (de type array) vous permettant de
connaitre:
$_FILES['my_file']['name']
Le nom
original du fichier, tel que sur la machine du client web.
$_FILES['my_file']['type']
Le
type MIME du fichier, si le navigateur a fourni cette information. Ex.:
"image/gif", "image/png", etc.
$_FILES['my_file']['size']
La
taille, en octets, du fichier téléchargé.
$_FILES['my_file']['tmp_name']
Le nom temporaire alloué
au fichier uploadé sur la machine serveur.
$_FILES['my_file']['error']
Le code d'erreur error code
associé au téléchargement de fichier.
3) Paramêtres du fichier uploadé
Prévoyez de préférence dans
l'administration de votre module les options permettant de pouvoir fixer les valeurs maxi pour la
hauteur, largeur et taille du fichier. Cette partie peut être réalisée par la
suite.
Fichier xoops_version.php
$modversion['config'][1]['name'] = 'max_imgheight';
$modversion['config'][1]['title'] ='_MI_MAX_HEIGHT' ,
$modversion['config'][1]['description'] ='_MI_DESC_MAXHEIGHT';
$modversion['config'][1]['formtype'] = 'textbox' ,
$modversion['config'][1]['valuetype'] = 'int' ;
$modversion['config'][1]['default'] = '1024' ,
$modversion['config'][2]['name'] = 'max_imgwidth';
$modversion['config'][2]['title'] ='_MI_MAX_WIDTH' ,
$modversion['config'][2]['description'] ='_MI_DESC_MAXWIDTH';
$modversion['config'][2]['formtype'] = 'textbox' ,
$modversion['config'][2]['valuetype'] = 'int' ;
$modversion['config'][2]['default'] = '1024' ,
$modversion['config'][3]['name'] = max_imgsize;
$modversion['config'][3]['title'] ='_MI_MAX_SIZE' ,
$modversion['config'][3]['description'] ='_MI_DESC_MAXSIZE';
$modversion['config'][3]['formtype'] = 'textbox' ,
$modversion['config'][3]['valuetype'] = 'int' ;
$modversion['config'][3]['default'] = '100000' ,
4) Le formulaire
4-1) XoopsFormFile
Lorsque l'on insêre un champ de type file dans un
formulaire par cette méthode :
$form->addElement(new
XoopsFormFile("Selectionner une image", "my_file", 30000););
xoops
insére en réalité 3 champs: le champ file et 2 champs cachés :
color=#009900><input type='file' name = 'my_file' id = 'my_file' />
<input type='hidden' name = 'MAX_FILE_SIZE' value = '30000' />
<input type='hidden' name='xoops_upload_file[]' id='xoops_upload_file[]' value = 'my_file' />
4-2) Code du formulaire
$form = new XoopsThemeForm(_MD_TITLE_FORM', "myform", "submit.php");
$form->setExtra( "enctype='multipart/form-data'" ) ; //impératif !
// Ã Â l'emplacement choisi pour le champ d'upload
$img_box = new XoopsFormFile(_MD_ADDIMG, "my_file", $max_imgsize);
$img_box->setExtra( "size ='65'") ; // optionnel : pour fixer la longueur de la textbox
$form->addElement($img_box);
5) Traitement du formulaire soumis
Tout d'abord,
initialisation des variables
// Taille maxi du fichier
$max_imgsize = 5000; // ou = $xoopsModuleConfig[max_imgsize]
// Largeur maxi de l'image
$max_imgwidth = 120; // ou = $xoopsModuleConfig['max_imgwidth']
// Hauteur maxi de l'image
$max_imgheight = 120; // ou =$xoopsModuleConfig['max_imgheight']
// Formats dont vous autorisez l'upload
$allowed_mimetypes = array('image/gif', 'image/jpeg', 'image/pjpeg', 'image/x-png');
// Répertoire d'upload
$img_dir = XOOPS_ROOT_PATH . "/modules/mymodule/images" ; // ou = XOOPS_UPLOAD_PATH; (répertoire upload de xoops)
Ttraitement du fichier uploadé
include_once(XOOPS_ROOT_PATH."/class/uploader.php");
// récupération du nom du fichier d'origine
// on pourrait également utiliser $field = $_FILES['my_file']['name']
$field = $_POST["xoops_upload_file"][0] ;
// test si le champ a été rempli :
if( !empty( $field ) || $field != "" ) {
// puis test si le fichier a été uploadé dans le réperoire temporaire:
if( $_FILES[$field]['tmp_name'] == "" || ! is_readable( $_FILES[$field]['tmp_name'] ) ) {
// non = l'upload a echoué on retourne au formulaire
redirect_header( 'submit.php' , 2, _MD_FILEERROR ) ;
exit ;
}
// création de l'objet uploader
$uploader = new XoopsMediaUploader($img_dir, $allowed_mimetypes, $max_imgsize, $max_imgwidth, $max_imgheight);
// test si le fichier uploadé est conforme en dimension et taille, et bien copié du répertoire temporaire au répertoire indiqué
if( $uploader->fetchMedia( $field ) && $uploader->upload() ) {
// L'upload a réussi - à  adapter bien évidemment
echo 'File uploaded successfully!';
// nom du fichier uploadé
echo 'Saved as: ' . $uploader->getSavedFileName() ;
// chemin complet
echo 'Full path: ' . $uploader->getSavedDestination();
// sinon l''upload a échoué : message d'erreur
} else {
echo $uploader->getErrors();
}
}
$uploader = new XoopsMediaUploader($img_dir, $allowed_mimetypes, $max_imgsize, $max_imgwidth, $max_imgheight);
$uploader->setPrefix( 'img' ) ;
// extraction extension du fichier
$ext = preg_replace( "/^.+\.([^.]+)$/sU" , "\\1" , $_FILES["my_file"]['name']) ;
// création du nom complet avec l'extension
$name_img = 'ma_photo.'.$ext;
$uploader = new XoopsMediaUploader($img_dir, $allowed_mimetypes, $max_imgsize, $max_imgwidth, $max_imgheight);
// spécification du nom
$uploader->setTargetFileName($name_img);