Précédent   Forum des professionnels en informatique > PHP > Langage > Débuter
Débuter Forum d'entraide pour débuter en PHP. Avant de poster -> Cours PHP, FAQ PHP, Outils PHP, etc.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 06/02/2012, 16h39   #1
Membre du Club
 
Inscription : janvier 2010
Messages : 210
Détails du profil
Informations personnelles :
Âge : 37

Informations forums :
Inscription : janvier 2010
Messages : 210
Points : 53
Points : 53
Par défaut Fonctions basename, rename et UTF-8

Bonjour,

Je récupère par le biais d'un champ input de type "file" le chemin d'un fichier jpg. Avec la fonction basename, j'extrais de ce chemin le nom du fichier que je stocke dans une 1ere variable ($file_recto_img_initiale).
Si besoin je "nettoie" le nom du fichier (notamment pour éviter les accents et les espaces) avec une Regex et stocke le résultat dans une 2nd variable ( $file_recto_img_new). Enfin, grâce à la fonction rename, je modifie le nom du fichier en question sur mon disque dur (je travaille en localhost et il n'est pas question d'upload).
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
 
<head>
 
<!--pas de charset indiqué-->
 
<?php
 
if(isSet($_POST["btSubmit2"])) {
 
 
$recto_img_initiale=mysql_real_escape_string(trim($_POST['couverture_recto_insert']));
 
$file_recto_img_initiale = basename($recto_img_initiale);// pour récupérer le nom du fichier image recto			
 
//////
$recto_img_new=mysql_real_escape_string(trim($_POST['couverture_recto_insert']));
$file_recto_img_new = basename($recto_img_new);			
 
$file_recto_img_new = preg_replace('/([^.a-z0-9]+)/i', '-', $file_recto_img_new);
 
 
rename("couvertures/$file_recto_img_initiale ", "couvertures/$file_recto_img_new" ); 
 
}
 
?>
</head>
 
<form method="POST" action="" >
<p>
<label for="couverture_recto_insert">Couverture recto:</label>
 
<input type="file"  name="couverture_recto_insert" >  
 
<input type="submit" value="Enregistrer le livre"name="btSubmit2" id="btSubmit2" /> 
 
</p>
</form>
Mon code fonctionne. Sauf si j'indique dans le head le charset suivant :
Code :
<meta http-equiv="content-type" content="text/html; charset=utf-8"/>
cela ne fonctionne plus car j'ai l'erreur suivante :
Code :
1
2
3
 
"Warning: rename(couvertures/ramé.jpg ,couvertures/ram-.jpg) [function.rename]: No error in C:\WAMP\www..."
//dans cet exemple $file_recto_img_initiale vaut "ramé".
La fonction rename est-elle allergique à l'UTF-8 ? A moins que cela soit la fonction basename ? Je suis débutant, voyez-vous une explication à ce dysfonctionnement ? Merci.
almoha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2012, 17h11   #2
Membre Expert
 
Avatar de Seb33300
 
Homme Sébastien Alfaiate
Développeur Web
Inscription : janvier 2007
Messages : 1 330
Détails du profil
Informations personnelles :
Nom : Homme Sébastien Alfaiate
Âge : 26
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : janvier 2007
Messages : 1 330
Points : 1 659
Points : 1 659
Si tu veux que ton site soit encodé en UTF8, il faut aussi que ton fichier soit en UTF8.

Par exemple sous Notepad++ : Encodage > Convertir en UTF-8
__________________
Zend Certified Engineer PHP 5.3

« Crois-tu comprendre le monde juste en matant le 20H Ou connaître l'histoire en ayant lu que l'angle des vainqueurs ? » Keny Arkana
Seb33300 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2012, 17h17   #3
Membre du Club
 
Inscription : janvier 2010
Messages : 210
Détails du profil
Informations personnelles :
Âge : 37

Informations forums :
Inscription : janvier 2010
Messages : 210
Points : 53
Points : 53
Effectivement. Mais mon fichier était déjà converti en UTF-8 sans BOM. Le problème demeure donc. Avez-vous une autre idée ? Merci.
almoha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2012, 17h40   #4
Modérateur
 
Inscription : septembre 2010
Messages : 7 250
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 250
Points : 8 635
Points : 8 635
basename dépend de la locale, donc si le fichier a des accents et compagnie ça coince, je te conseil de pas faire de basename sur le nom reel (ça sert a rien en plus)
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2012, 17h43   #5
Membre du Club
 
Inscription : janvier 2010
Messages : 210
Détails du profil
Informations personnelles :
Âge : 37

Informations forums :
Inscription : janvier 2010
Messages : 210
Points : 53
Points : 53
Merci pour ta proposition mais pourrais-tu expliciter STP ? Comment puis-je alors récupérer le nom du fichier si basename pose problème ? Merci.
almoha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2012, 18h10   #6
Modérateur
 
Inscription : septembre 2010
Messages : 7 250
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 250
Points : 8 635
Points : 8 635
c'est via $_FILES

http://www.php.net/manual/fr/features.file-upload.php
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/02/2012, 21h39   #7
Membre du Club
 
Inscription : janvier 2010
Messages : 210
Détails du profil
Informations personnelles :
Âge : 37

Informations forums :
Inscription : janvier 2010
Messages : 210
Points : 53
Points : 53
Mon problème particulier a trouvé sa solution en passant par un réencodage de UTF-8 => CP1252 de ma variable $file_recto_img_initiale. Sans cela la fonction rename aboutissait à l’erreur mentionnée.
almoha est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h39.


 
 
 
 
Partenaires

Hébergement Web