Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour,
J'essaye d'uploader un fichier avec Zend et de stocker dans la base de donnée les caractéristiques du fichier.
Pour ce qui est de l'upload, pas de soucis ça fonctionne bien... Par contre lorsque j'essaye de récupérer la taille et le type de mon fichier, ces informations sont vide.
Voila comment je procède dans mon controller:
$form=new Admin_Form_Document(); $this->view->form=$form; if ($this->_request->isPost()){ $formData = $this->_request->getPost(); $form->populate($formData); $chemin = "/chemin/vers/mon/repertoire/upload"; $form->nom->setDestination($chemin); $formData=$form->getValues(); if ($form->isValid($formData)){ $adapter= new Zend_File_Transfer_Adapter_Http(); $fileInfos=$adapter->getFileInfo(); print_r($fileInfos['nom']); } }
Et le code du formulaire :
class Admin_Form_Document extends Zend_Form { function __construct($options = null) { parent::__construct($options); $this->setName('document'); $this->setAttrib('enctype', 'multipart/form-data'); $nom = new Zend_Form_Element_File('nom'); $nom->setRequired(true) ->addValidator('NotEmpty') ->addValidator('Count', false, 1) ->addValidator('Size', false, 3145728) ->addValidator('Extension', false, 'jpg,png,bmp,gif,jpeg,pdf,txt,doc,pps,ppt,xls'); $submit = new Zend_Form_Element_Submit('submit'); $submit->setLabel('Ajouter'); $this->addElements(array($nom,$submit)); }
et voila ce que me retourne le print_r($fileInfos['nom']) (alors que l'upload à bien fonctionné...)
Array ( [name] => nomdufichier.jpg [type] => [tmp_name] => C:\wamp\tmp\phpC3A.tmp [error] => 0 [size] => [options] => Array ( [ignoreNoFile] => [useByteString] => 1 [magicFile] => [detectInfos] => 1 ) [validated] => [received] => [filtered] => [validators] => Array ( [0] => Zend_Validate_File_Upload ) )
Voilà, merci beaucoup pour votre aide...
Nico.
Hors ligne
Salut, as-tu activé l'extension fileInfo dans php ?
Hors ligne
Hello,
Peux-tu préciser ton environnement ? (OS, PHP, Extension)
@+
Hors ligne
Hello,
Merci pour vos réponses. Donc effectivement l'extension fileinfo n'était pas activée...
Cependant cela ne fonctionne toujours pas. Pour ce qui est de mon environnement (pour le moment je développe en local, mais j'ai testé sur le serveur sans plus de succès) :
OS : Windows XP
PHP : 5.2.9-2
Zend : 1.10.1
De mon côté j'ai avancé un peu et j'ai testé mon code avec une version précédente de Zend (la 1.9.7), et là, miracle, ça fonctionne !
Alors y a t-il un bug connu là dessus avec la 1.10 ? Est-ce qu'il vaut mieux que je reste comme ça avec la 1.9.7 ou est-ce que ça craint un peu ?
@+
Hors ligne
Hello,
Thomas a effectivement travaillé sur le sujet la semaine dernière (donc présent dans la 1.10.3).
As-tu la possibilité d'essayer avec le code la branche 1.10 du SVN ?
Lien : http://framework.zend.com/code/browse/S … lease-1.10
En bas à gauche tu as au choix : ZIP, TGZ, TBZ2.
@+
Hors ligne
tu peux normalement directement récupérer ces infos avec ton élément Zend_Form_Element_File
$data = $form->nom->getFileInfo();
Hors ligne
Hello,
Alors j'ai téléchargé la release 1.10, mais du coup j'ai toute l'appli qui bug... J'ai du louper quelque chose...
Par contre j'ai regardé le manuel pour les migration et j'ai trouvé ceci :
MimeType validation
For security reasons we had to turn off the default fallback mechanism of the MimeType, ExcludeMimeType, IsCompressed and IsImage validators. This means, that if the fileInfo or magicMime extensions can not be found, the validation will always fail.
If you are in need of validation by using the HTTP fields which are provided by the user then you can turn on this feature by using the enableHeaderCheck() method.
Note: Security hint
You should note that relying on the HTTP fields, which are provided by your user, is a security risk. They can easily be changed and could allow your user to provide a malcious file.
Et ça :
Zend_File_Transfer
Security change
For security reasons Zend_File_Transfer does no longer store the original mimetype and filesize which is given from the requesting client into its internal storage. Instead the real values will be detected at initiation.
Additionally the original values within $_FILES will be overridden within the real values at initiation. This makes also $_FILES secure.
When you are in need of the original values you can either store them before initiating Zend_File_Transfer or use the disableInfos option at initiation. Note that this option is useless when its given after initiation.
Le problème c'est que j'ai un peu de mal a saisir ce que cela signifie concrètement au niveau de mon code, si une ame charitable veux bien m'expliquer... :-)
Merci
@+
Nico.
Hors ligne
Pages: 1