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 :

Accès au contenu d'un répertoire


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2012
    Messages : 90
    Points : 48
    Points
    48
    Par défaut Accès au contenu d'un répertoire
    Bonjour,
    Je crée un petit gestionnaire de fichiers en PHP (façon artisanale) et je rencontre un problème pour accéder au contenu de mes répertoires.
    Ma base de données contient des liens hypertextes vers des dossiers. J'ai migré les dossiers rattachés dans un dossier REP de www.
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    // Etape 1
    $lien="REP/".$lien; 
    // Etape 2
    echo"<a href=\"$lien\">$lien</a>";
    // Etape 3
    if (!is_dir($lien))
    	{
    	// Si le chemin n'existe pas, message d'erreur
    	echo"<p class=\"erreur\"> répertoire non trouvé</p>";
    	}
    else
    	{
    	// Sinon, c'est bon
    	echo"<p class=\"message\">répertoire trouvé<p>";								
    	}
    L'étape 1 fonctionne et créé le chemin absolu vers le dossier
    L'étape 2 fonctionne et m'ouvre une nouvelle fenêtre PHP affichant le contenu du répertoire
    L'étape 3 en revanche ne fonctionne pas. ie même si j'ai pu accéder au contenu du répertoire à l'étape 2, le répertoire n'est pas trouvé.

    Mes chemins sont souvent de la forme REP/REP1/.../REP2/REPFINAL et contiennent de nombreux espaces. Je pense que le problème vient de ces espaces car si je crée le répertoire AZE directement dans REP, il est trouvé.
    Je ne sais pas en revanche comment y remédier et sollicite votre aide sur ce point.
    Merci d'avance

    e/ Je voulais ajouter que ces instructions fonctionnaient sur une version antérieure de l'application. La différence est que je transférais mon lien avec la méthode GET alors qu'ici j'utilise la méthode POST. De plus il me semble qu'avant, le lien dans la barre d'adresse comportait des % et %20 or ici ce n'est plus le cas (même lorsque j'accède au dossier avec l'étape 2).

  2. #2
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2012
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2012
    Messages : 16
    Points : 21
    Points
    21
    Par défaut
    Tu veux dire qu'il y a des espaces dans tes noms de répertoires ? Si oui, effectivement je pense que ça peut pas mal merdouiller...

    Tu pourrais essayer d'enlever les espaces de tes noms de répertoires et traiter les liens que tu reçois dans le POST. Tu supprimes tous les espaces contenus dans le lien pour faire correspondre.

    Autrement si avant le lien comportait des % et %20 (et peut-être d'autres caractères) c'est parce que tu utilisais la méthode GET. En POST aucun paramètre n'est passé dans l'URL donc tu ne vois plus ces caractères là (qui servent à remplacer les caractères spéciaux).

    Luis

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2012
    Messages : 90
    Points : 48
    Points
    48
    Par défaut
    Bonjour et merci pour votre réponse,

    La solution d'enlever tous les espaces/caractères spéciaux de mes chemins n'est malheureusement pas envisageable car je travaille avec des centaines de répertoires et je me vois mal les renommer un à un. Surtout si je dois refaire le travail côté MySQL.

    Est-il possible de traiter les liens pour qu'ils soient trouvés par is_dir? A vrai dire je ne comprend pas pourquoi l'étape 2 trouve le chemin et m'affiche le contenu du répertoire dans une nouvelle fenêtre alors que l'étape 3 (is_dir) ne le trouve pas. Il s'agit pourtant bien du même lien.

  4. #4
    Membre averti

    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2011
    Messages
    205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Juin 2011
    Messages : 205
    Points : 409
    Points
    409
    Billets dans le blog
    1
    Par défaut
    Essaies de donner à is_dir() le chemin absolu vers ton dossier (non pas juste "./mon_repertoire" mais "c:/wamp/www/mon_repertoire") ?
    si ce post vous a été utile, si votre problème est résolu.
    Pensez-y !
    __________________________________
    Doc officielle PHP | FAQ PHP | Cours PHP

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2012
    Messages : 90
    Points : 48
    Points
    48
    Par défaut
    J'ai remplacé ligne 2 par :
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    $lien="c:/wamp/www/REP/".$lien;

    et j'obtiens le message suivant :
    L'adresse n'a pas été reconnue
    Firefox ne sait pas ouvrir cette adresse car le protocole (c) n'est associé à aucun programme.

    e/
    Avec :
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    $lien="__DIR__/../../DOSSIERINSTANCE/".$lien;
    j'obtiens la même chose qu'avec le chemin relatif : accès au dossier via href OK, is_dir ne trouve pas

    e2/
    Bon je me sers un peu de ce sujet comme bloc note mais je suis toujours sur le problème, j'ai essayé d'ouvrir mon lien avec opendir et j'ai l'erreur suivante
    Warning: opendir(REP/REP1/REP2/REP3/REPFINAL)
    [<a href='function.opendir'>function.opendir</a>]: Le chemin d�acc�s sp�cifi� est introuvable. (code: 3) in C:\wamp\www\x.php on line x
    Deux points m'intriguent :
    - le chemin indiqué entre parenthèse est sans erreurs, les accents et espaces sont corrects.
    - le <a href> suggère que la fonction opendir fonctionne comme un lien. Alors pourquoi mon lien href fonctionne et pas opendir?

  6. #6
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2012
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2012
    Messages : 16
    Points : 21
    Points
    21
    Par défaut
    Essaie de commencer ton chemin par "/"

    J'ai vu que tu avais mis dans ton code de départ:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    // Etape 1
    $lien="REP/".$lien;
    essaie avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    // Etape 1
    $lien="/REP/".$lien;

  7. #7
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2012
    Messages : 90
    Points : 48
    Points
    48
    Par défaut
    Merci pour la réponse, ça ne fonctionne toujours pas.

    e/ Je suis repassé par la méthode GET mais j'ai toujours le problème alors que ça fonctionnait avant. Qu'est ce qui pourrait l'expliquer?

  8. #8
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2012
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2012
    Messages : 16
    Points : 21
    Points
    21
    Par défaut
    Est-ce que tu pourrais donner un lien complet pour voir sa constitution ?
    Il serait bien de voir la valeur réelle et complète de $lien

  9. #9
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2012
    Messages : 90
    Points : 48
    Points
    48
    Par défaut
    Je ne peux pas donner d'exemple précis car il s'agit de données d'entreprise, je propose un exemple ou j'ai remplacé les lettres par des x (certaines des lettres d'origines sont accentuées ou en majuscules) :
    REP/xxxxxxx xxxxxxx/XXX Xxxxx Xxxxx-xxxxx Xxxxxx xx xxxx

    Ce chemin est trouvé à l'étape 2 puisqu'il m'affiche le contenu du répertoire. L'URL est la suivante :
    serveur/REP/xxxxxxx xxxxxxx/XXX Xxxxx Xxxxx-xxxxx Xxxxxx xx xxxx/
    Elle comporte les accents, espaces, majuscules... Le chemin est identique à celui du répertoire.
    Mais il n'est pas trouvé à l'étape 3 puisqu'il me retourne Répertoire non trouvé.

  10. #10
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2012
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2012
    Messages : 16
    Points : 21
    Points
    21
    Par défaut
    Essaie en enlevant le "/" tout à la fin ?

  11. #11
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2012
    Messages : 90
    Points : 48
    Points
    48
    Par défaut
    Bonjour,
    le / à la fin s'ajoute tout seul et l'adresse est trouvée. Et j'ai toujours le problème en l'enlevant. Merci quand même

    e/

    Je pense avoir une piste mais je voudrai savoir ce que vous en pensez.
    Dans la version précédente de mon application, je n'utilisais pas les balises META et donc je n'avais pas la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <META http-equiv="Content-Type" content="text/html; charset=utf-8">
    et en regardant un peu sur internet j'ai trouvé cette intervention :
    "Pure ASCII is all that's allowed in HTTP headers.
    At any rate, I believe I am correct in saying ONLY ASCII (ANSI X3.4-1986) is allowed in the headers of any HTTP request, GET or POST. So no, ISO-8859-2 requests are not strictly valid HTTP. That said, there's probably a way to escape the desired special characters in the query string if that's what you're really asking for here."

    Je me demande donc si le problème n'est pas un problème d'encodage. Qu'en pensez-vous?

  12. #12
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2012
    Messages : 90
    Points : 48
    Points
    48
    Par défaut
    Bonsoir,
    Pour ceux qui tomberaient sur ce sujet, voici la solution :
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    $lien = iconv("utf-8", "iso-8859-1//IGNORE", $lien);

    Merci encore à ceux qui m'ont aidé.

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

Discussions similaires

  1. [AC-2003] Accès au contenu d'un répertoire
    Par STOUPI dans le forum VBA Access
    Réponses: 1
    Dernier message: 10/02/2010, 13h21
  2. Réponses: 3
    Dernier message: 28/10/2008, 13h20
  3. Copier le contenu d'un répertoire
    Par bianconeri dans le forum C++Builder
    Réponses: 5
    Dernier message: 30/12/2006, 13h00
  4. Copie du contenu d'un répertoire vers un autre
    Par IG88 dans le forum Windows
    Réponses: 4
    Dernier message: 30/07/2004, 14h33
  5. [DOM] Accès au contenu textuel d'un noeud avec DOM
    Par comexe2 dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 16/07/2004, 15h41

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