Limiter la longueur max nom d'un fichier

Eléphant du PHP | 55 Messages

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

ViPHP
xTG
ViPHP | 7331 Messages

08 août 2012, 21:00

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

Eléphant du PHP | 55 Messages

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

ViPHP
xTG
ViPHP | 7331 Messages

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 !

Eléphant du PHP | 55 Messages

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

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

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.
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Mammouth du PHP | 2278 Messages

10 août 2012, 09:08

Je signalerai simplement que la fonction que j'avais écrite extrait l'extension...
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

ViPHP
ViPHP | 2577 Messages

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.