Bonjour,
Je poste ici car il s'agit de la définition d'une bibliothèque.
J'écris une classe Upload pour gérer les envois de fichiers. Cette classe vise à encapsuler l'accès à la variable $_FILES et aux fonctions PHP comme move_uploaded_file(), et à gérer facilement les erreurs.
Or je m'interroge sur la manière de définir l'interface de cette classe et notamment la façon de récupérer les erreurs.
Au début je suis simplement parti sur le fonctionnement suivant :
Code php : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 $upload = new Upload( 'inputfile' ); //définition de la taille maximale $upload->maxSize = '100k'; //image valide ? if ( !$upload->isImage() ) { $this->flash->error( $i18n->__( 'invalid_image' ) ); //taille du fichier } else if ( !$upload->isBelowMaxSize() ) { $this->flash->error( $i18n->__( 'too_big_file' ) ); //autre erreur (par exemple UPLOAD_ERR_CANT_WRITE) } else if ( !$upload->hasError() ) { $logger->write( $e->getMessage() ); $this->forward( 'error', 'error', '500' ); }
Ensuite, j'ai envisagé le fonctionnement suivant (utilisant des exceptions) :
Qu'en pensez-vous ? Quelle approche vous semble la plus simple, la plus propre, la plus cohérente ? Est-ce une bonne idée de lever des exceptions ?
Code php : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 $destination = ROOT_DIR . 'var'; $upload= new Upload( 'myfile' ); $this->filename = $upload->getFileName(); $upload->allowedMIMETypes=array('image/jpeg', 'image/jpg', 'image/png', 'image/gif', 'image/bmp'); $upload->maxSize = 100000; try { $upload->upload( $destination ); } catch (Exception $e) { $type=get_class($e); switch ($type) { case 'UploadSizeException' : $this->flash->error( $i18n->__( 'too_big_file' ) ); break; case 'FileFormatException' : $this->flash->error( $i18n->__( 'too_big_file' ) ); break; default: $logger->write( $e->getMessage() ); $this->forward( 'error', 'error', '500' ); } }
Partager