OVH Cloud OVH Cloud

Vérifier la taille d'un fichier

15 réponses
Avatar
Pascale
Bonjour,

Dans un formulaire qui permet d'uploader du texte et des images, j'utilise
(depuis fort longtemps) <input type="hidden" name="MAX_FILE_SIZE"
value="50000">.

Ensuite, du côté PHP, je fais un certain nombre de contrôles pour m'assurer
que le fichier est bien un jpg et pas autre chose. En particulier :

$contenu1=getimagesize($_FILES['photo1']['tmp_name']);
$type1=$contenu1[2];
if ($type1!=2) { echo 'Erreur...';}

Si le fichier téléchargé est trop lourd, getimagesize me renvoie une
erreur.

J'ai conscience que ce n'est pas très propre comme solution et que je
devrais spécifiquement vérifier la taille du fichier que la personne a
tenté de télécharger, d'autant que c'est l'erreur la plus courante commise
par les utilisateurs.

Le mieux est-il de vérifier tout bêtement la taille du fichier dans
$_FILES['photo1']['size'] ou vaut-il mieux vérifier le contenu de
$_FILES['photo1']['error'] ? Ou bien ?...

--
Pascale
http://www.la-grille-verte.net

5 réponses

1 2
Avatar
Mickaël Wolff
On 31/10/11 18:46, DuboisP wrote:

et en te rajoutant ça dans le copier-coller, tu es plus heureux ?

$document=strip_tags(document);
$document=stripslashes($document);
$document=mysql_real_escape_string($document);



Non, c'est encore pire.
Le filtrage des données en amont est, à mon avis, une mauvaise
politique. Il faut adapter les données lors de leur usage (pas testé,
fait de tête) :

<?php

function mysql_query_format(mysqli $dbcon, $format/*, $args*/)
{
$args = func_get_args() ;
unset($args['dbcon']) ;
unset($args['format']) ;

$escaped = array() ;
foreach($args as $arg)
{
$escaped[] = $dbcon->real_escape_string($arg) ;
}

return call_user_func_array('sprintf', array_merge(array($format),
$escaped));
}

function html_escape_text($content, $encoding = 'utf-8')
{
return htmlentities($content, ENT_NOQUOTES, $encoding) ;
}

function html_escape_attribute($content, $delim = ''', $encoding = 'utf-8')
{
if($delim === ''')
$opt = ENT_QUOTES ;
elseif($delim === '"')
$opt = ENT_COMPAT ;
else
throw new Exception('Attribute delimiter is not recognized') ;

return htmlentities($content, ENT_NOQUOTES, $encoding) ;
}

C'est le genre de fonctions qu'il faut écrire et utiliser quand on
créé des requêtes SQL, et qu'on intègre du texte à l'HTML.
Avatar
Pascale
Mickaël Wolff écrivait
news:4eaed967$0$2268$:

Ok. Dans ce cas, il suffit de demander à l'OS la taille du fichier
;)

Quelque chose dans ce goût là :
filesize($_FILES['xxx']['tmp_namehéhé']);



Ah ah, je ne connaissais même pas cette fonction ! Ça donne un résultat
différent de $_FILES['photo1']['size'] ?

Comme l'a proposé DuboisP, tu devrais regarder le paramétrage de
ton hébergeur.



Je viens de regarder : la limite est à 64 M (octets ? bytes ?...) et moi je
me limite à 50 Ko (l'objectif du changement d'hébergeur étant justement
d'augmenter la taille autorisée des photos, vu que 50 Ko, ça fait vraiment
pas lourd).

Ceci dit, je serais plus violent : mauvais hébergeur,
changer hébergeur ;)



Le problème, c'est que je viens juste de payer pour un an...

--
Pascale
http://www.la-grille-verte.net
Avatar
Pascale
La commande filesize m'a permis d'y voir plus clair : en fait, si j'en
crois ce qu'elle me dit, c'est mon hébergeur actuel qui est trop
« laxiste » : une photo qui apparaît comme faisant 50 Ko fait en réalité
50664 octets (c'est un exemple).
Donc je ne peux pas franchement râler auprès de mon nouvel hébergeur... (:
Par contre, ce qui m'étonne, c'est qu'en cas de dépassement de la taille
maxi (quel que soit l'hébergeur), filesize($_FILES['photo1']['tmp_name'])
renvoie un beau rien tout neuf, ce qui ne m'aide donc pas pour indiquer à
mes utilisateurs que passé les bornes y a p'us d'limites...

--
Pascale
http://www.la-grille-verte.net
Avatar
DuboisP
Le Mon, 31 Oct 2011 20:39:48 +0100, Pascale
<chaton.tigre+ a écrit:

La commande filesize m'a permis d'y voir plus clair : en fait, si j'en
crois ce qu'elle me dit, c'est mon hébergeur actuel qui est trop
« laxiste » : une photo qui apparaît comme faisant 50 Ko fait en réalité
50664 octets (c'est un exemple).
Donc je ne peux pas franchement râler auprès de mon nouvel hébergeur...
(:
Par contre, ce qui m'étonne, c'est qu'en cas de dépassement de la taille
maxi (quel que soit l'hébergeur), filesize($_FILES['photo1']['tmp_name'])
renvoie un beau rien tout neuf, ce qui ne m'aide donc pas pour indiquer à
mes utilisateurs que passé les bornes y a p'us d'limites...




c'est normal
le ko informatique, c'est 1024
donc, 50 ko, ce sont 51200 octets

--
Utilisant le client e-mail révolutionnaire d'Opera :
http://www.opera.com/mail/
Avatar
Pascale
DuboisP <patrickr.dubois.don' écrivait
news::

c'est normal
le ko informatique, c'est 1024
donc, 50 ko, ce sont 51200 octets



Rhâââ... j'aurais dû y penser. Il n'empêche que ça reste un mystère, cette
différence de fonctionnement entre 2 hébergeurs, vu que le Ko sont censés
peser pareil partout...

Chez mon hébergeur actuel (celui qui est laxiste, si on peut dire), c'est :
PHP Version 5.2.6-1+lenny13
System Linux celia 3.0.4-grsec-em64t #0 SMP Tue Sep 6 23:04:09 CEST
2011 x86_64

Chez le nouvel hébergeur, c'est :

PHP Version 5.2.17
System Linux edain.planethoster.net 2.6.18-338.12.1.el5.lve0.8.34 #1
SMP Tue Jun 7 16:46:50 EEST 2011 x86_64

Y a-t-il un paramètre bien planqué quelque part qui justifierait cette
différence de traitement ?
--
Pascale
http://www.la-grille-verte.net
1 2