Page 1 sur 4
un "notice" à effacer
Posté : 05 mars 2010, 17:10
par diabless6
Bonjour,
Je suis sur un listing de mon bouquin et en vérifiant mon code je n'ai pas fait d'erreur. En recherchant sur le forum, j'ai trouvé que je pouvais désactiver le error_reporting = E_ALL ^ E_NOTICE, mais c'est pas bien.
J'ai aussi trouvé la solution de mettre des @ là ou ya ça me gène, mais c'est s'en doute pas bien aussi. Mais j'aime bien les choses pas jolie jolie
Donc, j'ai cette petite erreur :
Notice: Undefined index: fichier in C:\UwAmp\www\Php\2Jean Engels\9formulaires3.php on line 26
Notice: Undefined index: fichier in C:\UwAmp\www\Php\2Jean Engels\9formulaires3.php on line 29
<form action="<?php $_SERVER['PHP_SELF'] ?>" method="post" enctype="multipart/form-data">
<fieldset>
<input type="hidden" name="MAX_FILE_SIZE" value="900000"/>
<legend>Transfert de fichier</legend>
<input type="file" name="fichier" accept="image/jpeg" />
<input type="submit" value="Uploader"/>
</fieldset>
</form>
<?php
if (isset($_FILES['fichier']))
{
echo'Taille max authorisée :'.$_POST['MAX_FILE_SIZE'].' octets<br/>';
echo'clés & valeurs du tableau: ';
foreach($_FILES['fichier'] as $cle=>$val)
{echo '<ul><li>'.$cle.' = '.$val.'</li></ul>';}
}
$result=move_uploaded_file($_FILES['fichier']['tmp_name'],'imagephp.jpg'); (erreur ici)
if ($result==true)
{echo '<br/><big>Transfert Ok!</big><br/>';}
else {echo'<br/> Erreur de tranfert ! n°:'.$_FILES['fichier']['error'];} (erreur ici)
?>
Je pense que ça vient que ma variable $_FILES['fichier'] est vide car quand je réalise l'upload les "notices" s'en vont.
merci
Re: un "notice" à effacer
Posté : 05 mars 2010, 17:20
par Dr@ke
Quand tu affiches la page sans poster, eh bien il n' existe aucune variable
$_POST.
Donc, faut les vérifier avec un
isset():
(de préférence avant tout autrechose)
if (isset($_POST['MAX_FILE_SIZE']))
De plus ton accolade qui ferme ton premier
if (celui avec les
isset()) est bien trop haute à mon avis...
Sinon effectivement, tes variables pourront ne pas être définis étant en dehors de ton
isset()...
Et ton
move_uploaded_file s'exécuter malgré qu'aucun poste ne soit effectué...
Re: un "notice" à effacer
Posté : 05 mars 2010, 17:45
par diabless6
Alors donc c'est une question d'emplacement:
if (isset($_FILES['fichier']))
{
echo'Taille max authorisée :'.$_POST['MAX_FILE_SIZE'].' octets<br/>';
echo'clés & valeurs du tableau: ';
foreach($_FILES['fichier'] as $cle=>$val)
{echo '<ul><li>'.$cle.' = '.$val.'</li></ul>';}
$result=move_uploaded_file($_FILES['fichier']['tmp_name'],'imagephp.jpg');
if ($result==true)
{echo '<br/><big>Transfert Ok!</big><br/>';}
else {echo'<br/> Erreur de tranfert ! n°:'.$_FILES['fichier']['error'];}
}
?>
Là ça fonctionne bien. Ya aucun message.
Merci bien

Re: un "notice" à effacer
Posté : 05 mars 2010, 17:57
par Dr@ke
Sauf que tu ne fais aucune vérification
isset() sur
$_POST['MAX_FILE_SIZE'].
Tu me diras, cela n'est pas grave, car je te conseille vivement de l'enlever de ton formulaire.
Donc enlève ceci:
<input type="hidden" name="MAX_FILE_SIZE" value="900000"/>
Car un utilisateur mal intentionné pourrait facilement modifier cette donnée.
Tu peux par exemple utiliser une constante:
define('MAX_FILE_SIZE' 900000);
De plus tu ne fais aucune vérification de la taille du fichier dans ton script.
Tu devrais donc ensuite comparer la taille du fichier avec la constante
MAX_FILE_SIZE.
if ($_FILES['fichier']['size'] <= MAX_FILE_SIZE) // si la taille est inférieur au maximum autorisé
Re: un "notice" à effacer
Posté : 05 mars 2010, 18:01
par Yosh
Et utiliser
ini_set ( "upload_max_filesize", "20M");
C'est pas mieux?
Re: un "notice" à effacer
Posté : 05 mars 2010, 18:04
par Dr@ke
Si aussi, le principal ici, est de ne pas se fier à un champ INPUT pour la taille maximale du fichier.
Puis la modification des php.ini n'est pas toujours possible.
De plus si tu as plusieurs scripts Upload ou plusieurs types de fichiers a uploader suivant une taille définie pour chaque type, au lieu de modifier le php.ini au risque de faire bugguer l'upload d'un autre utilisateur....
Re: un "notice" à effacer
Posté : 05 mars 2010, 18:40
par diabless6
Ha oui effectivement on peut bidouiller le Hidden, c'est marqué dans la suite de mon livre.
Juste que le code n'était pas bien tourné et ça m'a donné ces "notices" alors je me suis affolée.
Donc le Hidden, je le supprime, faut tout le temps se remettre en question, c'est pénible
J'ai modifié:
define('MAX_FILE_SIZE',90000);//constante taille max upload
if (isset($_FILES['fichier']) && $_FILES['fichier']['size'] <= MAX_FILE_SIZE)
{
echo'Taille max authorisée :'.$_FILES['fichier']['size'].' octets<br/>';
echo'clés & valeurs du tableau: ';
foreach($_FILES['fichier'] as $cle=>$val)
{echo '<ul><li>'.$cle.' = '.$val.'</li></ul>';}
$result=move_uploaded_file($_FILES['fichier']['tmp_name'],'imagephp.jpg');
if ($result==true)
{echo '<br/><big>Transfert Ok!</big><br/>';}
else {echo'<br/> Erreur de tranfert ! n°:'.$_FILES['fichier']['error'];}
}
J'ai juste un petit hic, si la taille du fichier est >90 000 mon else "erreur $_FILES...[error] ne s'affiche pas. Et si je le met à l'extérieur de mon IF, je vais ravoir mes "notices"

Re: un "notice" à effacer
Posté : 05 mars 2010, 18:48
par Dr@ke
Bon désolé, en fait tu peux le laisser, car la majorité des navigateurs et php sont censés le prendre en compte.
Donc cela peut aider.
La seule chose a savoir, c'est que ce n'est pas une valeur à laquelle il faut te fier.
Donc ensuite:
Si tu peux modifier ton fichier php.ini, et bien fais comme disait Yosh mais en mettant ta propre valeur maximale de taille.
Si tu ne peux pas le modifier, et bien prends exemple sur mon post, pour vérifier la taille dans ton script, mais en utilisant une constante et donc en utilisant pas la valeur du champ hidden..
Re: un "notice" à effacer
Posté : 05 mars 2010, 19:00
par diabless6
Le ini_set ( "upload_max_filesize", "20M");
ça modifie la valeur par defaut du php.ini ?
J'ai essayé : ini_set ( "upload_max_filesize", "5K");
mais ça n'a pas changer dans mon Phpinfo() :
upload_max_filesize 2M 2M
Re: un "notice" à effacer
Posté : 05 mars 2010, 19:13
par diabless6
j'ai essayé comme ça : ( "upload_max_filesize", "90000"); ou ( "upload_max_filesize", "0.9M");
ça fait rien du tout !
Donc c'est inutile de modifier cette directive. Le PHP est plus judicieux.
Re: un "notice" à effacer
Posté : 05 mars 2010, 19:19
par Dr@ke
Oui,
ini_get() pour lire le php.ini
http://php.net/manual/fr/function.ini-get.php
in_set() pour modifier le php.ini
http://php.net/manual/fr/function.ini-set.php
Tu peux tester:
<?php
echo 'Ancienne valeur: ' . ini_get('upload_max_filesize') . '<br>';
ini_set('upload_max_filesize', '20M');
echo 'Nouvelle valeur: ' . ini_get('upload_max_filesize');
?>
PS:
900000 c'est beaucoup beaucoup trop
http://www.manuelphp.com/php/ini.upload ... lesize.php
En octets, donc à moins que je me montre mais
90000 = 90M
Et donc:
900000 = 900M
Re: un "notice" à effacer
Posté : 05 mars 2010, 19:45
par diabless6
oui mais chez moi, ça ne marche pas.
Je crois que ça vient de ça :
http://www.php.net/manual/fr/configuration.changes.php
Soit le PHP est executer via Apache avec un module ou en CGI ,j'espère que jdit pas de conneries

Re: un "notice" à effacer
Posté : 05 mars 2010, 19:49
par Dr@ke
Non
Donc , tu pourrais peut-être utiliser le fichier
htaccess mais bon, autant ne pas se compliquer la vie.
Fais ta vérification en php comme j'expliquais dans mes premiers posts, ensuite il faut toujours tester, tu mets un petit maximum et tu essayes d'envoyer plus gros, dans un premier temps sans la balise
hidden.
Quand tout fonctionne bien, tu remets la balise
hidden avec la même valeur que ta vérification en php
[EDIT]
Désolé je corrige:
Tu laisses la balise hidden mais pour bien tester ta vérification en php, tu mets une plus grosse valeur dans la balise
hidden.
Ensuite t'essayes d'uploader un fichier plus gros que ta vérification php mais plus petit que ton
hidden.
Quand tout fonctionne, remets la même valeur dans la balise
hidden.
Re: un "notice" à effacer
Posté : 05 mars 2010, 20:04
par diabless6
oui, je vais pas trop me compliquée la vie sinon j'avancerai jamais
Merci bien, je prends note

Re: un "notice" à effacer
Posté : 05 mars 2010, 20:54
par Dr@ke
Tout en gardant à l'esprit que si tu désires permettre l'upload de fichiers avec des tailles plus importantes que celle définit dans ton fichier
php.ini, tu seras obligé dans ce cas de modifier le
php.ini pour que cela fonctionne.
Le plus simple à mon avis serait de demander au support de ton hébergeur si cela est possible et comment...
Mais dans la majorité des cas, cela n'est pas nécessaire et pas forcément une bonne idée.
En général, cela ce limite plutôt a diminuer cette valeur en fonction des fichiers qui sont censés être uploadés.
Et donc dans ce cas, la méthode que je te montrais plus haut, fonctionnera
PS:
Sinon je n'avais pas vue mais il y a un tutoriel intéressant ici:
faq-tutoriels/upload-fichiers-par-http-t545.html