Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Tester la validite du nom d'un fichier uploade ?

45 réponses
Avatar
paul
Bonjour,

je voudrais vérifier la validité du nom d'un fichier photo uploadé (pas
de caractère accentué, d'espace,...).

J'ai mon champ input :
<input type="file" name="submitfiles[]" size="50">


J'ai essayé ce code :

if(ereg('[^[:space:]a-zA-Z0-9_.-]{1,}',
$HTTP_POST_FILES["submitfiles"]))
{
die ("<span class='attention'>Nom de fichier non
valide.<br><input type='button' value='Modifier'
onclick='goBack();'></span>");
}
else
{
include ("upload.php");
}




Mais ça ne fonctionne pas, je n'arrive pas à rentrer dans le if(ereg(...
:-((

Vous savez pourquoi ?
A cause du $HTTP_POST_FILES["submitfiles"] mal écrit ?


Merci pour votre aide !

Paul

10 réponses

1 2 3 4 5
Avatar
CrazyCat
if(ereg('[^[:space:]a-zA-Z0-9_.-]{1,}',
$HTTP_POST_FILES["submitfiles"]))


Tout d'abord, $HTTP_POST_FILES est déprécié, il vaut mieux utiliser $_FILES.
Ensuite, le nom du fichier est dans $_FILES['submitfiles']['name'] (un
print_r aurait permit de voir que c'est un tableau)
Et dernièrement, la regexp pourrait être: [w.-]{1,}

voila, bon courage

--
Discussions et débats sur l'actualité: http://www.sujets-d-actu.eu

Avatar
paul
In article <eniek6$4f2$,
CrazyCat wrote:

if(ereg('[^[:space:]a-zA-Z0-9_.-]{1,}',
$HTTP_POST_FILES["submitfiles"]))


Tout d'abord, $HTTP_POST_FILES est déprécié, il vaut mieux utiliser $_FILES.
Ensuite, le nom du fichier est dans $_FILES['submitfiles']['name'] (un
print_r aurait permit de voir que c'est un tableau)
Et dernièrement, la regexp pourrait être: [w.-]{1,}


Merci pour ta réponse.

J'ai mis :

if(ereg('[w.-]{1,}', $_FILES['submitfiles']['name']))
{
die ("blah blah");
}
else
{
include ("upload.php");
}


Mais ça ne fonctionne toujours pas (je ne rentre jamais dans le if...)
Pourquoi ça ?


voila, bon courage
Oui j'en au besoin...

;-)


Avatar
P'tit Marcel
In article <eniek6$4f2$,
CrazyCat wrote:
je voudrais vérifier la validité du nom d'un fichier photo uploadé (pas
de caractère accentué, d'espace,...).
Et dernièrement, la regexp pourrait être: [w.-]{1,}



Merci pour ta réponse.

J'ai mis :
if(ereg('[w.-]{1,}', $_FILES['submitfiles']['name']))
{
die ("blah blah");
Mais ça ne fonctionne toujours pas (je ne rentre jamais dans le if...)



Je pense que le masque de CrazyCat n'est pas idéal :
- on n'échappe pas le . et le - dans un masque
- w *peut* autoriser les caractères accentués
- accessoirement le {1,} est superflu

Donc il faudrait plutôt :

if(eregi('[^-a-z0-9._]', $_FILES['submitfiles']['name'])) {
die(blablabla);
}

ou mieux :
if(preg_match('`[^-a-z0-9._]`i', $_FILES['submitfiles']['name'])) {
die(blablabla);
}


Le masque signifie qu'un caractère au moins ne fait partie :
NI des caractères compris entre a et z (minuscule ou majuscule)
NI des chiffres entre 0 et 9
NI des caractères . _


Accessoirement, vérifie que $_FILES['submitfiles']['name'] contient bien
ce que tu crois (print_r est ton amie, mais ça Olivier te l'avais déjà
soufflé).


eça
--
P'tit Marcel
stats sur les forums modérés http://www.centrale-lyon.org/ng/



Avatar
CrazyCat
Je pense que le masque de CrazyCat n'est pas idéal :


Tu ne t'avances pas trop, je me bat chaque fois que je fais une regexp :)

- on n'échappe pas le . et le - dans un masque


Je ne crois pas que ce soit une faute non plus (je peux me tromper) et
je dirais même que je suis étonné pour le -

- w *peut* autoriser les caractères accentués


j'apprend...

- accessoirement le {1,} est superflu


oui, effectivement, c'est un masque...

Donc il faudrait plutôt :
if(preg_match('`[^-a-z0-9._]`i', $_FILES['submitfiles']['name'])) {


Effectivement, il vaut souvent mieux chercher l'erreur que la bonne réponse.

--
Discussions et débats sur l'actualité: http://www.sujets-d-actu.eu

Avatar
paul
In article <459d1abd$0$290$,
P'tit Marcel wrote:

if(preg_match('`[^-a-z0-9._]`i', $_FILES['submitfiles']['name'])) {
die(blablabla);
}
Le masque signifie qu'un caractère au moins ne fait partie :
NI des caractères compris entre a et z (minuscule ou majuscule)
NI des chiffres entre 0 et 9
NI des caractères . _

Oui c'est bien ce qu'il me faut



Accessoirement, vérifie que $_FILES['submitfiles']['name'] contient bien
ce que tu crois (print_r est ton amie, mais ça Olivier te l'avais déjà
soufflé)


Merci à vous 2

La situation se débloque !
;-)

Avatar
kurtz le pirate
In article ,
paul wrote:

Bonjour,

je voudrais vérifier la validité du nom d'un fichier photo uploadé (pas
de caractère accentué, d'espace,...).


ha ? une nom de fichier avec des espaces et/ou des caractères accentués
n'est pas un nom valide ? suivant quels critères détermines-tu cela ?



--
klp

Avatar
paul
In article ,
kurtz le pirate wrote:

je voudrais vérifier la validité du nom d'un fichier photo uploadé (pas
de caractère accentué, d'espace,...).


ha ? une nom de fichier avec des espaces et/ou des caractères accentués
n'est pas un nom valide ? suivant quels critères détermines-tu cela ?


En fait j'ai eu un souci lors de l'upload d'un fichier image avec un
espace dans son nom. ImageMagick qui s'occupe normalement du resize
automatique là ne s'en occupait plus pour cette raison...
Et comme l'utilisateur avait uploadé une image 300dpi, elle n'a pas été
passée en 72dpi non plus. Pas jolie la mise en page finale !
:-(

C'est vrai que j'ai radicalisé la solution sans avoir testé tous les cas
de figure qui créent ce souci avec imageMagick...


Avatar
Surfoo
In article ,
kurtz le pirate wrote:

je voudrais vérifier la validité du nom d'un fichier photo uploadé (pas
de caractère accentué, d'espace,...).
ha ? une nom de fichier avec des espaces et/ou des caractères accentués

n'est pas un nom valide ? suivant quels critères détermines-tu cela ?


En fait j'ai eu un souci lors de l'upload d'un fichier image avec un
espace dans son nom. ImageMagick qui s'occupe normalement du resize
automatique là ne s'en occupait plus pour cette raison...
Et comme l'utilisateur avait uploadé une image 300dpi, elle n'a pas été
passée en 72dpi non plus. Pas jolie la mise en page finale !
:-(

C'est vrai que j'ai radicalisé la solution sans avoir testé tous les cas
de figure qui créent ce souci avec imageMagick...


En mettant le nom de fichier entre " ", ça devrait fonctionner. S'ils
n'y sont pas, imagemagick croit que se sont d'autre paramètres qui sont
passé, donc forcément ça bug. Enfin c'est comme ça dans les chemins
absolus sous Linux.



Avatar
paul
In article ,
paul wrote:

Accessoirement, vérifie que $_FILES['submitfiles']['name'] contient bien
ce que tu crois (print_r est ton amie, mais ça Olivier te l'avais déjà
soufflé)


Merci à vous 2

La situation se débloque !
;-)


Argh... j'ai parlé trop vite :

je me suis rendu compte que je rentre toujours dans ce if :
if (!empty($_FILES["submitfiles"])) {

même quand aucun fichier n'a été choisi dans ce input :
print '<input type="file" name="submitfiles" size="50"><p>'."n";


Qu'est-ce qui se passe ?

Merci
Paul


Avatar
paul
In article , Surfoo
wrote:

C'est vrai que j'ai radicalisé la solution sans avoir testé tous les cas
de figure qui créent ce souci avec imageMagick...


En mettant le nom de fichier entre " ", ça devrait fonctionner. S'ils
n'y sont pas, imagemagick croit que se sont d'autre paramètres qui sont
passé, donc forcément ça bug. Enfin c'est comme ça dans les chemins
absolus sous Linux.


J'ai essayé de mettre (mais j'ai sans doute mal compris...) :

$tmpfile = "$submitfiles['tmp_name']";
$photo = "$submitfiles['name']"

Et j'obtiens :

Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE,
expecting T_STRING or T_VARIABLE or T_NUM_STRING in
/home.2/v/e/u/veu/www/upload.php on line 12

Le whitespace c'est celui que j'ai mis dans le nom du fichier pour
tester.


1 2 3 4 5