comment renommer un fichier uploadé sans perdre son extension? - PHP - Programmation
Marsh Posté le 16-01-2004 à 00:38:04
C'est quoi ces caractères non ascii
Tu devrais avoir le nom du fichier à l'origine
Marsh Posté le 16-01-2004 à 10:18:31
je veux que les utilisateurs n'envoient pas des fichiers dont les noms comportant d'autres caracteres que "a-z", "1-9", "-" et "_"
C'est tout... sinon, le fichier uploade ne s'affiche pas !
j'en ai qui m'envoient des apostrophes, des accents, des cedilles, et j'en passe
Marsh Posté le 16-01-2004 à 10:56:11
Personnellement j'utilise ça :
Code :
|
Marsh Posté le 16-01-2004 à 11:33:05
oui, c'est pas mal; la tu changes le nom que tu entres dans la base ... mais pas celui du fichier qui est uploade sur le serveur
=> quand tu veux l'effacer, la base ne le reconnait plus
Comment est ce que je peux renommer le fichier uploadé avec le meme nom (modifié) que celui qui va etre entre dans la base ???
Marsh Posté le 16-01-2004 à 12:44:03
???
La fonction move_uploaded_file déplace le fichier temporaire uploadé vers le répertoire de ton choix avec le nom de ton choix (ici $image_name)
Sur le serveur dans ton répertoire d'upload il n'y aura que des fichiers que tu aura toi même nommés. Ile ne faut pas confondre le fichier temporaire avec celui qui est stocké sur le serveur. Le fichier temporaire à de toute façon un nom completement différent de l'original.
Marsh Posté le 16-01-2004 à 14:02:44
ok, je pige mieux; merci
une derniere question a laquelle je ne trouve pas de reponse :
dans ta fonction preg_replace("([^\d\w\.])"... , que signifie "\d\w." ?? Est-ce que TOUS les caracteres speciaux possibles (apostrophes, accentues, cedilles... etc) seront bien renommes ?
Marsh Posté le 16-01-2004 à 14:35:02
La traduction c'est :
[^ :: c'est la négation de l'ensemble qui suis
\d : chiffre
\w : caractère de l'alphabet
\. : point =)
Donc tout ce qui n'est pas tout ça je le remplace par "_"
C'est simple mais ça fonctionne bien donc j'ai pas eu envie de chercher plus compliqué.
Marsh Posté le 16-01-2004 à 14:47:43
génial ! merci Azzarel, c'est exactement ce que je cherchais , tu es un tout bon !
Marsh Posté le 16-01-2004 à 17:02:15
juste un add-on... si tu veux egalement supprimer les caracteres accentues (qui restent avec ton code), j'ajoute un
$image_name=strt($image_name, "äâàéèëêïîöôùûüÿç", "aaaeeeeiioouuuyc" );
avant ton preg_replace
il y a peut etre plus elegant ? mais ca marche ...
Marsh Posté le 15-01-2004 à 22:21:57
bonjour,
je veux permettre a des utilisateurs d'uploader des fichiers :
- les noms de ces fichiers etant entres dans une base de donnee en meme temps que l'upload
- ils doivent garder leurs extensions, pour pouvoir etre affiches sur une page web qui les extrait ensuite de la base.
Pas de pb pour la fonction d'upload elle meme en PHP, pas non plus pour l'entrer dans la base.
Mais j'ai des utilisateurs qui envoient des fichiers avec des caracteres non ascii => pas d'affichage possible ensuite...
Comment est ce que je peux renommer mes fichiers pour supprimer les caracteres non ascii ? Je precise que le nom inséré dans la base doit etre le meme que celui du fichier "physique" pour que je puisse l'effacer dynamiquement par la suite ...
pour info voila mon code d'upload :
$uploaddir = '../image/';
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploaddir . $_FILES['userfile']['name']))
{
$nom_image=$_FILES['userfile']['name'];
$requete="INSERT INTO matable (image) VALUES ('$nom_image')";
...etc }
Si quelqu'un a une astuce ?
Merci
Message édité par jerkeve le 15-01-2004 à 22:26:27