Limiter la longueur max nom d'un fichier

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Limiter la longueur max nom d'un fichier

Re: Limiter la longueur max nom d'un fichier

par Mazarini » 10 août 2012, 09:29

Il faut faire attention qu'une extension peut comporter 4 caractères (jpeg, docx...)

Recherche de la position du dernier point (cf strpos et équivalent dans la doc)
Séparer le nom du fichier (sans l’extension) et l'extension en fonction de la position du point
Tronquer le nom du fichier (sans l'extention) si nécessaire
Reconstituer le nom complet du fichier.

En respectant, ces étapes et en utilisant les bouts de code précédemment donnés, ca doit être possible.

Re: Limiter la longueur max nom d'un fichier

par sirakawa » 10 août 2012, 09:08

Je signalerai simplement que la fonction que j'avais écrite extrait l'extension...

Re: Limiter la longueur max nom d'un fichier

par Ryle » 09 août 2012, 20:37

En dehors du fait que la fonction substr() te permet de retourner un nombre limité de caractères, elle te permet aussi et surtout de couper une chaine à partir d'une position donnée (et tu peux donc partir de la fin de la chaine).

Autre solution pour récupérer l'extension dans le nom d'un fichier, tu peux repérer la position du point dans la chaîne (strpos, strrpos, ...) et ainsi tronquer et récupérer uniquement la fin de la chaine pour l'ajouter à ton nom de fichier.

Re: Limiter la longueur max nom d'un fichier

par JcLoD » 09 août 2012, 17:05

Cette doc la je l'ai déjà lu plusieurs fois: http://php.net/manual/fr/function.substr.php

J'ai essayer quelque chose:
$extension=substr($extension,4) ;
                                $nomFichier =substr($nomFichier, 0, 15).strtolower($extension);
                          if (file_exists("up/$nomFichier" )) {

                          $rand = date("YmdHis");
                          $nomFichier = $rand."_".$nomFichier;

                          }
                                
                                // Ensuite, on copie le fichier uploadé ou bon nous semble.
				$uploadOk = move_uploaded_file($nomTemporaire, $DESTINATION_FOLDER.$nomFichier);
				if($uploadOk){
Ca fonctionne pour les fichiers a moins de 15 caracteres. Le problème c'est que pour les fichiers couper il n'y a plus d'extension et même avec les fichiers a moins de 15 caractères après l'upload l'extension n'est pas détecté par le script car il détecte un fichier inconnu.

Merci d'avance

Re: Limiter la longueur max nom d'un fichier

par xTG » 09 août 2012, 11:02

Fais un premier substr() pour virer l'extension avant de faire celui pour limiter à 15 caractères. ;)
Je vois pas trop là^^

Faut mettre quoi dans la fonction substr() pour virer l'extension ?

Merci d'avance
Lire la documentation, je vois visiblement que depuis le debut qu'on t indique cette fonction tu ne t es pas donne la peine de la lire pour en comprendre son utilisation...
Il y a en plus de magnifiques examples !

Re: Limiter la longueur max nom d'un fichier

par JcLoD » 08 août 2012, 21:03

Fais un premier substr() pour virer l'extension avant de faire celui pour limiter à 15 caractères. ;)
Je vois pas trop là^^

Faut mettre quoi dans la fonction substr() pour virer l'extension ?

Merci d'avance

Re: Limiter la longueur max nom d'un fichier

par xTG » 08 août 2012, 21:00

Fais un premier substr() pour virer l'extension avant de faire celui pour limiter à 15 caractères. ;)

Re: Limiter la longueur max nom d'un fichier

par JcLoD » 08 août 2012, 20:59

Bonjour,

Au niveau du dossier de destination le problème est régler c'était effectivement ça: $DESTINATION_FOLDER = "up/";

Au niveau de la double extension cela ne se passe que si le fichier a moins de 15 caractères !
$nomFichier = strtr($nomFichier, 
                        'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ', 
                        'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
                        $nomFichier = preg_replace('/([^.a-z0-9]+)/i', '-', $nomFichier);
				$nomFichier =substr($nomFichier, 0, 15).strtolower($extension);
                          if (file_exists("up/$nomFichier" )) {

                          $rand = date("YmdHis");
                          $nomFichier = $rand."_".$nomFichier;

                          }
                                
                                // Ensuite, on copie le fichier uploadé ou bon nous semble.
				$uploadOk = move_uploaded_file($nomTemporaire, $DESTINATION_FOLDER.$nomFichier);
				if($uploadOk){
Merci d'avance

Re: Limiter la longueur max nom d'un fichier

par Mazarini » 08 août 2012, 15:49

$DESTINATION_FOLDER = "up/"; ?

Pour l'autre problème, faudrait voir le code...

Re: Limiter la longueur max nom d'un fichier

par JcLoD » 08 août 2012, 15:01

Bonjour,

Alors actuellement le fichier uploader.php est dans le dossier a la racine du ftp et j'aimerais que les fichiers uploader aille dans le dossier 'up'

Donc j'ai mis ca en destination: $DESTINATION_FOLDER = $_POST["up/"];

Mais sa ne fonctionne pas les fichiers s'upload dans le dossier racine ou il y a le fichier uploader.

Et en plus j'ai un dernier soucis les fichiers qui ne sont pas déjà existant donc qu'il n'y a pas besoin de renommer qui s'upload, s'upload actuellement avec une double extension (hortensia.jpg.jpg)

Alors que ceux qui sont renommer non qu'une extension.

Merci d'avance

Re: Limiter la longueur max nom d'un fichier

par sirakawa » 08 août 2012, 12:16

$DESTINATION_FOLDER.$nomFichier et $nomFichier, ce n'est pas le même fichier

Re: Limiter la longueur max nom d'un fichier

par xTG » 08 août 2012, 06:54

C'est le move_uploaded_file qui enregistre le fichier. :roll:

Re: Limiter la longueur max nom d'un fichier

par JcLoD » 07 août 2012, 23:53

Alors voilà j'ai essayer ceci:
$nomFichier =substr($nomFichier, 0, 15).strtolower($extension);
                          
                                
                                // Ensuite, on copie le fichier uploadé ou bon nous semble.
				$uploadOk = move_uploaded_file($nomTemporaire, $DESTINATION_FOLDER.$nomFichier);
				if($uploadOk){

 
if (file_exists("$nomFichier" )) {

$rand = date("YmdHis");
$nomFichier = $rand."_".$nomFichier;

}
Sa m'a amener sur la page suivante le fichier a été renommé avec la date devant mais il n'as pas été uploader ! J'ai vérifier dans le ftp le fichier n'y est pas.
Nouveau nom de fichier: 20120807235220_Counter-Strike-.jpg

Auriez vous une idée de pourquoi sa ne l'upload pas ? J'ai suivi ceci: http://www.infos-du-net.com/forum/26271 ... xiste-deja

Merci d'avance

Re: Limiter la longueur max nom d'un fichier

par sirakawa » 07 août 2012, 22:49

La date insuffisant, jour.heure :peut être, ou le time stamp...

Re: Limiter la longueur max nom d'un fichier

par JcLoD » 07 août 2012, 22:28

Ok d'accord c'est pas si simple que ça :s

Et je pensais si on vérifie que le fichier est déjà présent (file_exists()).

Au lieu d'ajouter un chiffre a la fin, on fait apparaître au début du nom du fichier la date d'upload du fichier, ça ne serait pas plus simple a mettre en fonctionnement (il n'y aurait plus a vérifier la présence existante d'un 1, d'un 2 ... ?

Cordialement,