Précédent   Forum des professionnels en informatique > PHP > Langage > Fichiers
Fichiers Forum d'entraide sur les fichiers avec PHP. Avant de poster -> FAQ fichiers et Sources fichiers
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 18/09/2007, 00h15   #1
Membre régulier
 
Inscription : janvier 2004
Messages : 228
Détails du profil
Informations forums :
Inscription : janvier 2004
Messages : 228
Points : 70
Points : 70
Par défaut [Upload] Noms de fichiers et apostrophes

Soit un un upload d'un fichier nommé "l'avion.txt" (presence d'apostrophe)
En local (easyphp), il apparait à l'identique aprés un upload
Sur certains serveurs, le nom est échappé et devient "l\'avion.txt"

1) quelle directive serveur fait varier la chose ?

2) Dans la mesure ou je désire faire un delete sur ce fichier, comment faire pour detecter si je suis en présence d'un nom échappé ou pas ?

Merci pour votre aide
pierre50 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/09/2007, 00h30   #2
Rédacteur/Modérateur
 
Avatar de N1bus
 
Inscription : janvier 2003
Messages : 2 018
Détails du profil
Informations personnelles :
Âge : 47
Localisation : France, Charente Maritime (Poitou Charente)

Informations forums :
Inscription : janvier 2003
Messages : 2 018
Points : 1 992
Points : 1 992
Bonjour,

Ce serait tout de même plus simple de remplacer l'apostrophe au chargement du fichier par un tiret ou underscore.

Ainsi tu conserves un nom de fichier correct (sans apostrophe) et ton unlink() fonctionnera.
N1bus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/09/2007, 08h40   #3
Membre régulier
 
Inscription : janvier 2004
Messages : 228
Détails du profil
Informations forums :
Inscription : janvier 2004
Messages : 228
Points : 70
Points : 70
Le nom du fichier est affiché en clair sur la page Web et je souhaite conserver la lisibilité avec apostrophe (c'est pour des enfants)

Sinon je vais essayer de détecter la presence d'un \ sur le nom du fichier avec du regex... mais un coup de pouce serait le bienvenu.
pierre50 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/09/2007, 09h04   #4
Rédacteur/Modérateur
 
Avatar de N1bus
 
Inscription : janvier 2003
Messages : 2 018
Détails du profil
Informations personnelles :
Âge : 47
Localisation : France, Charente Maritime (Poitou Charente)

Informations forums :
Inscription : janvier 2003
Messages : 2 018
Points : 1 992
Points : 1 992
Rien ne t'empêche de remplacer l'apostrophe par un underscore pour l'upload et de remplacer ensuite le underscore par un apostrophe pour l'affichage.

Note:
Sur certains systèmes, tous les caractères ne sont pas autorisés pour les noms de fichiers, ce qui peut générer des erreurs.

Pour les noms des fichiers, le plus sûr :
  • en minuscules
  • sans accent
  • sans caractères spéciaux
  • sans espace
  • sans ponctuation (sauf tiret, underscore, point)
N1bus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/09/2007, 09h32   #5
Membre régulier
 
Inscription : janvier 2004
Messages : 228
Détails du profil
Informations forums :
Inscription : janvier 2004
Messages : 228
Points : 70
Points : 70
Oui mais j'ai aussi des enseignants qui upload des noms de fichiers avec des underscore...

Pour bien détailler :
C'est une appli que les enseignants installe. Je ne connais pas le type de serveur

j'ai une table mysql ou j'ai mes noms de fichiers
Dans la table et qq soit le serveur je vois l'avion.txt
Dans le dossier écrit en dur, j'ai
  • Sur un easyphp local l'avion.txt
  • Sur un serveur autre l'\avion.txt (mis par le serveur)

Quand je realise un lien pour lecture, tout cela fonctionne parfaitement. Sur le serveur autre, il fait curieusement tout seul l'association l'avion.txt de la table vers l'\avion.txt

Le probleme se pose lors d'un unlink
Dois-je ecrire unlink(l'avion.txt) ou unlink (l'\avion.txt)
Je ne sais pas au bout ce qu'il ya comme nom ecrit en dur...
pierre50 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/09/2007, 09h36   #6
Rédacteur/Modérateur
 
Avatar de N1bus
 
Inscription : janvier 2003
Messages : 2 018
Détails du profil
Informations personnelles :
Âge : 47
Localisation : France, Charente Maritime (Poitou Charente)

Informations forums :
Inscription : janvier 2003
Messages : 2 018
Points : 1 992
Points : 1 992
Citation:
Je ne sais pas au bout ce qu'il ya comme nom ecrit en dur...
Tu n'as pas accés au serveur ? Même en FTP ?
N1bus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/09/2007, 10h55   #7
Membre régulier
 
Inscription : janvier 2004
Messages : 228
Détails du profil
Informations forums :
Inscription : janvier 2004
Messages : 228
Points : 70
Points : 70
Je ne peux savoir ou ILS installent mon application... Encore un fois, certains vont installer en local (easyphp) d'autres installeront chez Free d'autres sur des serveurs académiques Linux ...
pierre50 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/09/2007, 11h08   #8
Rédacteur/Modérateur
 
Avatar de N1bus
 
Inscription : janvier 2003
Messages : 2 018
Détails du profil
Informations personnelles :
Âge : 47
Localisation : France, Charente Maritime (Poitou Charente)

Informations forums :
Inscription : janvier 2003
Messages : 2 018
Points : 1 992
Points : 1 992
Alors dans ce cas pour que ton appli soit compatible avec tous les systèmes dans ta table tu mets 2 champs :
  • un pour le titre du fichier qui sera affiché ( avec mysql_real_escape_string())
  • un pour le chemin du fichier " "nettoyé"
pour nettoyer les noms des fichiers, tu peux utiliser une fonction comme celle-ci :

Code :
1
2
3
4
5
6
7
 
function MakeLink($chaine){
 $tofind = "ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ /'";
 $replac = "AAAAAAaaaaaaOOOOOOooooooEEEEeeeeCcIIIIiiiiUUUUuuuuyNn---";
 
 return(strtolower(strtr($x_chaine,$tofind,$replac)));
}
et que tu appelles comme ceci :
Code :
1
2
 
$nom_du_fichier_nettoye = MakeLink("l'avion.txt");
puis tu enregistres $nom_du_fichier_nettoyé dans la table.

A l'affichage, tu devras récupérer les deux champs : 1 pour afficher le nom du fichier avec appostrophes et tutti quanti et un pour le lien vers le fichier (href)
N1bus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/09/2007, 11h33   #9
Membre régulier
 
Inscription : janvier 2004
Messages : 228
Détails du profil
Informations forums :
Inscription : janvier 2004
Messages : 228
Points : 70
Points : 70
Oui tout à fait... et je te remercie pour cette solution

Mais sans abuser peux tu repondre à ma première question

1) quelle directive serveur fait varier la chose ?

Il me semble par exemple que l'on peut detecter si magic_quotes_gpc est activé par exemple sur un serveur ? Je me trompe ?

Alors existe-t-il un magic_ quelque chose qui activé echappe mes noms de fichiers ?
pierre50 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/09/2007, 11h35   #10
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
Citation:
Envoyé par pierre50
1) quelle directive serveur fait varier la chose ?
Directive magic_quotes_gpc à On ?

Citation:
Envoyé par pierre50
2) Dans la mesure ou je désire faire un delete sur ce fichier, comment faire pour detecter si je suis en présence d'un nom échappé ou pas ?
Voir la fonction get_magic_quotes_gpc ?

Edit : en partie grillé
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/09/2007, 12h00   #11
Membre régulier
 
Inscription : janvier 2004
Messages : 228
Détails du profil
Informations forums :
Inscription : janvier 2004
Messages : 228
Points : 70
Points : 70
Pour faire très court et encore plus simple...
A la suite d'un upload d'un fichier nommé l'avion.txt, quel est le paramétrage serveur qui fait qu'un easyphp local code en dur l'avion.txt et qu'un serveur type Free code automatiquement l\'avion.txt ?
pierre50 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/09/2007, 13h07   #12
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
Vous avez déjà la réponse
Citation:
Envoyé par pierre50
quel est le paramétrage serveur qui fait qu'un easyphp local code en dur l'avion.txt
Directive magic_quotes_gpc sur Off (la "norme").

Citation:
Envoyé par pierre50
qu'un serveur type Free code automatiquement l\'avion.txt ?
Directive magic_quotes_gpc sur On.

Voir la fonction get_magic_quotes_gpc renvoyant un booléen indiquant cet état ainsi que cette contribution.
julp 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 23h39.


 
 
 
 
Partenaires

Hébergement Web