IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[FTP] OpenDir() et chemin avec des caractères spéciaux (', é, etc)


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 30
    Points : 21
    Points
    21
    Par défaut [FTP] OpenDir() et chemin avec des caractères spéciaux (', é, etc)
    Salut à tous,

    J'ai un petit soucis.

    Dans le cadre d'une gallerie Photo/Vidéo que je suis en train de coder, je propose de déposer ses dossiers directement par FTP et ensuite la gallerie s'occupe de tout (création des miniatures, conversion des videos en FLV ...) ...

    Le pb, c'est que je peux avoir des répertoires avec des caractères spéciaux genre "Ski au Val d'allos" qui comprend ici le ' ...

    Il me dit alors qu'il n'arrive pas à ouvrir le dossier car il n'existe pas ...

    Pour les caractères accentués, j'ai utilisé la fonction urlencode() et urldecode() et cela fonctionne mais pas pour le ' ...

    Quand je passe en ligne de commande sur mon dédié, je vois que pour entre dans ce dossier, il protège les caractères mais je ne trouve pas de fonctions PHP me permettant cela ...

    Connaissez-vous une solution pour pouvoir utiliser ces noms de dossiers spéciaux ?

    Merci d'avance

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2005
    Messages
    514
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 514
    Points : 631
    Points
    631
    Par défaut
    Bonjour,
    quand vous parlez de protéger le caractère < ' > vous parlez de < \' > et du caractère d'échappement < \ >?

    Du reste, pour urlencode :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?php
     
      echo urlencode('J\'ai fait un rêve!');
     
      // aura pour résultat : J%27ai+fait+un+r%EAve%21
     
    ?>
    Donc je ne comprends pas trop votre problème.

    Cordialement,
    DaRiaN.

  3. #3
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Ici, le système de fichiers Unix n'est pas celui de Windows. Il n'accèpte pas les espaces et les caractères accentués pour les noms de fichiers et dossiers. Perso, j'ai réalisé une petite fonction qui va remplacer les accents par des lettres sans accents (minuscules et majuscules), va également remplacer les lettres particulières comme œ par les 2 caractères oe, puis va remplacer tous les autres caractères spéciaux par un souligné (_). Ce qui donnerait dans ton exemple : Ski_au_Val_d_allos

    Voir du côté de la fonction strtr...
    De retour parmis vous après 10 ans!!

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 30
    Points : 21
    Points
    21
    Par défaut
    Citation Envoyé par DaRiaN Voir le message
    Bonjour,
    quand vous parlez de protéger le caractère < ' > vous parlez de < \' > et du caractère d'échappement < \ >?

    Du reste, pour urlencode :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?php
     
      echo urlencode('J\'ai fait un rêve!');
     
      // aura pour résultat : J%27ai+fait+un+r%EAve%21
     
    ?>
    Donc je ne comprends pas trop votre problème.

    Cordialement,
    DaRiaN.
    Salut,
    Merci de la réponse.

    Exemple simple, j'ai un repertoire "2003-12-21__Ski au Val d'Allos".
    Je clique sur un lien qui me passe le repertoire en paramètre de l'URL genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    index.php?action=lister&folder=Photos%2F2003%2F2003-12-21__Ski+au+Val+d%27Allos%2F
    Quand j'arrive sur la page où je fais un OpenDir(), j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Warning: opendir(Photos/2003/2003-12-21__Ski au Val d\'Allos/) [function.opendir]: failed to open dir: No such file or directory
    Merci.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 30
    Points : 21
    Points
    21
    Par défaut
    Citation Envoyé par Sub0 Voir le message
    Ici, le système de fichiers Unix n'est pas celui de Windows. Il n'accèpte pas les espaces et les caractères accentués pour les noms de fichiers et dossiers. Perso, j'ai réalisé une petite fonction qui va remplacer les accents par des lettres sans accents (minuscules et majuscules), va également remplacer les lettres particulières comme œ par les 2 caractères oe, puis va remplacer tous les autres caractères spéciaux par un souligné (_). Ce qui donnerait dans ton exemple : Ski_au_Val_d_allos

    Voir du côté de la fonction strtr...
    Salut,

    Le truc, c'est que ce repertoire existe bien, il est pris en compte par Linux ... Et si je me met en ligne de commande, je peux y accèder en tappant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cd 2003-12-21__Ski\ au\ Val\ d\'Allos/
    Il me protège les caractères spéciaux... Il n'existe pas de fonction qui fasse cela en automatique ?

    Sinon, serait-il possible de me montrer la tienne ?

    Merci d'avance

  6. #6
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Citation Envoyé par Sebastos Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cd 2003-12-21__Ski\ au\ Val\ d\'Allos/
    Il me protège les caractères spéciaux... Il n'existe pas de fonction qui fasse cela en automatique ?
    Oui. Essaye avec AddSlashes() pour protéger les caractères spéciaux.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $chaine=AddSlashes($chaine);
    De retour parmis vous après 10 ans!!

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 30
    Points : 21
    Points
    21
    Par défaut
    Citation Envoyé par Sub0 Voir le message
    Oui. Essaye avec AddSlashes() pour protéger les caractères spéciaux.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $chaine=AddSlashes($chaine);
    J'ai essayé mais cela ne fonctionne pas ... En fait, la chaine est déja protégée quand je la passe en paramètre (GET) puisque qu'il m'affiche bien le antislash dans le nom de dossier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Warning: opendir(Photos/2003/2003-12-21__Ski au Val d\'Allos/)

  8. #8
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Ok.
    A la réception de ta chaine, Il faut (si nécessaire) enlever les antislaches de protection, sinon, tu risques de les doubler...
    Utilises la fonction StripSlashes();

    Mais en fait, je te conseillerais plutôt d'utiliser urlencode() si la chaîne passe par GET , puis urldecode() pour la réceptionner : $chaine=urldecode(@$_GET['folder']);

    Essaye aussi d'ajouter des guillemets avec opendir : $chaine='"'.$chaine.'"';

    Si rien ne fonctionne, montre-nous ce que tu obtiens comme chaine avec ces fonctions.
    De retour parmis vous après 10 ans!!

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 30
    Points : 21
    Points
    21
    Par défaut
    C'est justement ce que je fais, mais je crois que cela ne fonctionne que pour les caractères accentés et autres ...

    Voici les étapes de mon process :

    1 ) Je passe mon URL dans un lien avec urlencode() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $_strLink = '?action=lister&folder='.urlencode($myFolder);
    ce qui me donne quand je survole le lien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    index.php?action=lister&folder=2003-12-21__Ski+au+Val+d'Allos
    et au final quand je clique dessus, j'ai dans la barre d'adresse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    index.php?action=lister&folder=Photos%2F2003%2F2003-12-21__Ski+au+Val+d%27Allos%2F
    2) Je récupère mon URL gràce à urldecode() :
    En brut (sans encore éxécuter urldecode()), je récupère avec $_GET['folder] :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Photos/2003/2003-12-21__Ski au Val d\'Allos/
    et après le urldecode() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Photos/2003/2003-12-21__Ski au Val d\'Allos/
    Ce qui est la même chose semble-t'il ...

    Et j'ai bien sur mon erreur OpenDir() ...

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 30
    Points : 21
    Points
    21
    Par défaut
    C'est bon, j'ai la solution :

    Il faut que je fasse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $rep = stripslashes(urldecode($_GET['folder]));
    Et là ça marche ...

    Par contre, du coup, a quoi me sert le urldecode puisque les URL semblaient etres les mêmes (voir mon post au dessus) ?

    Merci.

  11. #11
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Les caractères spéciaux / accentués ne sont pas supportés dans les url... Les fonctions UrlEncode() et UrlDecode() permettent de résoudre (en partie) ce problème. Pour ma part, je préfère utiliser mes propres fonctions d'encodage : StrToHexStr() et HexStrToStr() -> Les chaînes étant complètement codées avec la valeur ASCII des caractères, je n'ai pas besoin de les traiter avec AddSlashes() et StripSlaches(). D'ailleurs si tu es intérressé pour les essayer, dis le moi, que je poste le code.
    De retour parmis vous après 10 ans!!

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 30
    Points : 21
    Points
    21
    Par défaut
    Sub0,

    J'allais justement te demander si cela ne te dérangerait de poster tes méthodes

    Je suis intéressé en effet, cela résoudrait pas mal de soucis, je n'y aurais pas pensé.

    Merci d'avance

  13. #13
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    //=============================================
    function StrToHexStr($instr){
      if(empty($instr)) return '';
      $count=0; 
      $outstr='';
      $len=strlen($instr);
      if($len>0)
        while($count<$len){ 
          $outstr.=@dechex(ord($instr{$count})); 
          $count++; 
        } 
      return strtolower($outstr);
    }
     
    //=============================================
    function HexStrToStr($instr){
      $instr=trim($instr);
      if(empty($instr)) return '';
      $count=0; 
      $outstr='';
      $len=strlen($instr);
      if($len>0)
        while($count<$len){ 
          $outstr.=@chr(hexdec(
            $instr{$count}.$instr{$count+1})); 
          $count+=2; 
        }
      return $outstr;
    }
    De retour parmis vous après 10 ans!!

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 30
    Points : 21
    Points
    21
    Par défaut
    Merci bien Sub0.

    Je vais tester ça.

    @++ et merci encore

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. lecture d'un fichier avec des caractères spéciaux
    Par Invité dans le forum SAS Base
    Réponses: 24
    Dernier message: 20/01/2011, 09h50
  2. Noms de fichiers avec des caractères spéciaux
    Par weabow dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 24/11/2010, 15h51
  3. Copie d'un fichier avec des caractères spéciaux
    Par totofe dans le forum Scripts/Batch
    Réponses: 5
    Dernier message: 15/09/2010, 12h28
  4. HttpWebRequest avec des caractères spéciaux
    Par Tristan Zwingelstein dans le forum Silverlight
    Réponses: 1
    Dernier message: 17/12/2009, 10h21
  5. wcsicmp avec des caractère spéciaux : Ê et ê
    Par hitchie dans le forum Windows
    Réponses: 1
    Dernier message: 04/06/2008, 09h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo