OVH Cloud OVH Cloud

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

5 réponses

1 2 3 4 5
Avatar
paul
In article <45a6157c$,
Olivier Miakinen <om+ wrote:


Merci Olivier.
Ça fonctionne :

ÇaCoÛteZéro¤Piece.jpg
devient
CaCouteZero_Piece.jpg


Génial ! (je suppose que tu avais un û au lieu d'un Û)
Oui exactement



Ceci dit il m'arrive quelque chose d'étrange :
en continuant à tester, j'ai eu une erreur avec un fichier avec un nom
improbable se terminant par éàç.jpg

Le nom est bien changé en eac.jpg par la fonction, mais ImageMagick ne
traite pas l'image.

J'ai un message m'avertissant qu'une division par 0 n'est pas possible à
ce niveau du code :
list($width, $height) = getimagesize($tmpfile);
$imgratio=$width/$height;

Il trouve 0 pour $height...

Je rappelle que je n'interviens pas sur $tmpfile qui est généré
automatiquement. Je ne modifie que $photo :
$submitfiles = $_FILES["submitfiles"];
$tmpfile = $submitfiles['tmp_name'];
$photo = getRewriteString($submitfiles['name']);{



Mais ce qui est encore plus étrange, comme je suis sur Mac, j'ai testé
depuis un PC en uploadant un fichier éàç.jpg. et là il n'y a aucun
problème...

Que se passe-t-il ?


Avatar
Bruno Desthuilliers

la regex devient alors /^[-._pLpN]+$/


Oui.


Euh... non.

C'est /^[-._pLpN]+$/u


A tes souhaits !-)



Avatar
Olivier Miakinen

Ceci dit il m'arrive quelque chose d'étrange :
en continuant à tester, j'ai eu une erreur avec un fichier avec un nom
improbable se terminant par éàç.jpg


Le même fichier fonctionne avec un autre nom ?
Un autre fichier plante aussi avec ce même nom ?

En bref : ce n'est pas le contenu du fichier qui fait ça plutôt
que son nom ?

Mais ce qui est encore plus étrange, comme je suis sur Mac, j'ai testé
depuis un PC en uploadant un fichier éàç.jpg. et là il n'y a aucun
problème...


*un* fichier ou *le même* fichier ?

Avatar
paul
In article ,
paul wrote:

Ceci dit il m'arrive quelque chose d'étrange :
en continuant à tester, j'ai eu une erreur avec un fichier avec un nom
improbable se terminant par éàç.jpg

Le nom est bien changé en eac.jpg par la fonction, mais ImageMagick ne
traite pas l'image.

J'ai un message m'avertissant qu'une division par 0 n'est pas possible à
ce niveau du code :
list($width, $height) = getimagesize($tmpfile);
$imgratio=$width/$height;

Il trouve 0 pour $height...

Je rappelle que je n'interviens pas sur $tmpfile qui est généré
automatiquement. Je ne modifie que $photo :
$submitfiles = $_FILES["submitfiles"];
$tmpfile = $submitfiles['tmp_name'];
$photo = getRewriteString($submitfiles['name']);{



Je n'ai peut-être pas été clair, mais ce problème n'a rien à voir avec
la fonction qui renomme le fichier...
:-(


Mais ce qui est encore plus étrange, comme je suis sur Mac, j'ai testé
depuis un PC en uploadant un fichier éàç.jpg. et là il n'y a aucun
problème...

Que se passe-t-il ?


Un codage spécial au Mac sur certains caractères accentués qui
provoquerait la génération d'un mauvais nom de fichier temporaire ?...
A priori pas :

print_r($tmpfile);
me donne le même style nom de : /tmp/php + 6 caractères aplanimériques
en majuscule ou non

Sur Mac avec éàç.jpg (qui ne passe pas) :
/tmp/phpPcUkVU
/tmp/phpMWkggS
/tmp/php9IjWls

Sur PC pas de différence notable dans la structure des noms de fichiers.

Sur Mac avec ÇaCoûteZéro¤Pièce.jpg (qui passe) :
/tmp/phptem9V1
/tmp/phpZIOQcI
/tmp/phpDmeBPN

Avatar
paul
In article <45a6c577$,
Olivier Miakinen <om+ wrote:


Ceci dit il m'arrive quelque chose d'étrange :
en continuant à tester, j'ai eu une erreur avec un fichier avec un nom
improbable se terminant par éàç.jpg


Le même fichier fonctionne avec un autre nom ?
oui


Un autre fichier plante aussi avec ce même nom ?
oui


En bref : ce n'est pas le contenu du fichier qui fait ça plutôt
que son nom ?
Exactement


Mais ce qui est encore plus étrange, comme je suis sur Mac, j'ai testé
depuis un PC en uploadant un fichier éàç.jpg. et là il n'y a aucun
problème...


*un* fichier ou *le même* fichier ?
les 2 :

j'ai renommé un fichier image en éàç.jpg : aucun souci.
Puis j'ai copié le fichier qui plantait sur Mac (via clé USB) sur le PC
puis fait l'upload : aucun souci.

Je ne sais pas si c'est une histoire Mac Pc.
Mais le même nom de fichier fait planter sur un ordinateur et pas sur
l'autre...


1 2 3 4 5