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] Accès fichiers sur serveur distant


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Inscrit en
    Février 2004
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 55
    Points : 28
    Points
    28
    Par défaut [FTP] Accès fichiers sur serveur distant
    Salut à tous

    (Désolé de reposter mais finalement mon ancien post (http://www.developpez.net/forums/sho...d.php?t=168566) ne correspondait plus trop à ce que je voulais (trop compliqué) donc si mr l'admin peut le virer...)

    Voilà cette fois ce sera simple : je voudrais savoir comment tester l'existence de fichiers situés sur un serveur distant.
    Mon appli est sur un serveur d'appli (bah oui) et les fichiers auxquels je voudrais accéder sont sur un autre serveur.

    j'utilise comme "url" un truc du genre : \\ipserveurdefichier\rep\fichier.ext
    et fopen me dit que le chemin, dossier, fichier n'existe pas
    et file_exists me renvoi false en permanence

    par contre en passant par href=file://///ipserveurdefichier/rep/fichier.ext aucun problème

    Toute idée est la bienvenue, merci

  2. #2
    Membre émérite

    Homme Profil pro
    Expert PHP
    Inscrit en
    Novembre 2004
    Messages
    2 127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Expert PHP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 127
    Points : 2 557
    Points
    2 557
    Par défaut
    bah c'est normal, cette écriture avec des \ dans le chemin c'est typique windows, mais pas du tout php.

    il est ou ton probleme en fait ??

  3. #3
    Nouveau membre du Club
    Inscrit en
    Février 2004
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 55
    Points : 28
    Points
    28
    Par défaut
    Après un certain nombre de recherches j'ai enfin trouvé cette petite fonction qui teste la validité d'une url :
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
      function remote_file_exists ($url)
    {
     
    /*
       Return error codes:
       1 = Invalid URL host
       2 = Unable to connect to remote host
    */
     
       $head = "";
       $url_p = parse_url ($url);
     
       if (isset ($url_p["host"]))
       { $host = $url_p["host"]; }
       else
       { return 1; }
     
       if (isset ($url_p["path"]))
       { $path = $url_p["path"]; }
       else
       { $path = ""; }
     
       $fp = fsockopen ($host, 80, $errno, $errstr, 20);
       if (!$fp)
       { return 2; }
       else
       {
           $parse = parse_url($url);
           $host = $parse['host'];
     
           fputs($fp, "HEAD ".$url." HTTP/1.1\r\n");
           fputs($fp, "HOST: ".$host."\r\n");
           fputs($fp, "Connection: close\r\n\r\n");
           $headers = "";
           while (!feof ($fp))
           { $headers .= fgets ($fp, 128); }
       }
       fclose ($fp);
       $arr_headers = explode("\n", $headers);
       $return = false;
       if (isset ($arr_headers[0]))
       { $return = strpos ($arr_headers[0], "404") === false; }
       return $return;
    }
    elle marche bien et même un peu trop bien car même si le fichier n'existe pas, elle trouve quelque chose.

    J'ai bien vu que ça sort au début parce que vu la tête de mon url le url_parse marche pas vraiment mais etant assez newbie en php si quelqu'un est capable de m'expliquer un peu ce que ça fait ou encore où se trouve "l'erreur" (s'il y en a une) je lui en serait reconnaissant.

    Merci

  4. #4
    Nouveau membre du Club
    Inscrit en
    Février 2004
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 55
    Points : 28
    Points
    28
    Par défaut
    il est ou ton probleme en fait ??
    Mon problème est que je veus tester l'existence d'un fichier situé sur un serveur distant et s'il existe l'ouvrir. Or je vois pas vraiment comment accéder à ce fichier.
    En fait si tu dis que les \\ sont propres à windows, quel serait l'équivalent php ou Linux ...?

  5. #5
    Membre éclairé
    Avatar de kankrelune
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    763
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 763
    Points : 858
    Points
    858
    Par défaut
    Tu ne peut faire de file_exists() sur un serveur distant... ça va de soit... cette fonction utilise le système de fichier du serveur où la fonction est appelée... .. .

    Concernant le fopen() si c'est pour un fichier distant utilise une url et non pas un path physique... et ce pour les mêmes raison qu'avec file_exists()... .. .

    @ tchaOo°

  6. #6
    Nouveau membre du Club
    Inscrit en
    Février 2004
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 55
    Points : 28
    Points
    28
    Par défaut
    merci kankrelune mais malheureusement je ne vois pas vraiment comment former mon URL.

    voilà les infos dont je dispose, si tu pouvais m'aiguiller pour cette URL de m....
    protocole : ??
    ipserveur où est fichier : j'ai
    lettre lecteur réseau (<=> serveur au dessus) : j'ai
    chemin du fichier : j'ai (\dossiers\...\)
    nom du fichier : j'ai (.sxw ou .doc)

    merci encore

  7. #7
    Membre expérimenté Avatar de julien.63
    Profil pro
    balayeur
    Inscrit en
    Décembre 2005
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : balayeur

    Informations forums :
    Inscription : Décembre 2005
    Messages : 1 348
    Points : 1 311
    Points
    1 311
    Par défaut
    peut être que tu peux essayer une url du genre:
    http://nomdedomaine.com/dossier_1/do...le_fichier.txt

    c'est je pense un des meilleurs moyens d'accèder à un serveur distant.

  8. #8
    Nouveau membre du Club
    Inscrit en
    Février 2004
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 55
    Points : 28
    Points
    28
    Par défaut
    J'ai peur de dire une connerie mais je crois qu'il n'y a pas de "nom de domaine" (je veus dire un truc avec un .com ou autre; au pire j'ai le nom du serveur).

    En tout cas http://nomserveur/dossier/.../fichier.ext ça marche pas

    Merci et désolé d'être "difficile"

  9. #9
    Membre expérimenté Avatar de julien.63
    Profil pro
    balayeur
    Inscrit en
    Décembre 2005
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : balayeur

    Informations forums :
    Inscription : Décembre 2005
    Messages : 1 348
    Points : 1 311
    Points
    1 311
    Par défaut
    c'est peut être moi qui en dit une
    mais comment tu y accèdes à ton serveur distant? c'est un serveur web?
    sinon est ce que tu as regardé sur php.net:http://de3.php.net/manual/fr/function.fread.php
    Si tu descends un peu dans la page y'a un bout de code pour accèder aux fichiers distants.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?php
    // Pour PHP 5 et suivant
    $handle = fopen("http://www.example.com/", "rb");
    $contents = stream_get_contents($handle);
    fclose($handle);
    ?>

  10. #10
    Membre émérite

    Homme Profil pro
    Expert PHP
    Inscrit en
    Novembre 2004
    Messages
    2 127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Expert PHP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 127
    Points : 2 557
    Points
    2 557
    Par défaut
    bah : file://///ipserveurdefichier/rep/fichier.ext

    en fait les \\ c'est propre à windows, et donc quand tu veux accéder à un fichier sur ton pc, tu peux faire \\ ou file:///etc ...
    et sur linux php, ce n'est que comme ca.

  11. #11
    Nouveau membre du Club
    Inscrit en
    Février 2004
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 55
    Points : 28
    Points
    28
    Par défaut
    Jutement ce qui me rend fou c'est que j'ai un serveur d'appli ou se trouve les fichiers php (jusque là tout va bien) et un serveur samba (de fichiers me semble-t-il puisque c'est juste du stockage).

    j'arrive à récupérer les fichiers par du html avec
    <a href=file://///ipserveur/chemin/fichier.ext>

    mais j'arrive pas à vérifier si le fichier existe avant (par fopen ou autre) : toujours cette url pour accéder au serveur samba ?

    Ca me semble tout bête comme problème et pourtant...

    Précision je suis avec PHP 4.3

  12. #12
    Nouveau membre du Club
    Inscrit en
    Février 2004
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 55
    Points : 28
    Points
    28
    Par défaut
    merci Maxoo mais le file:///// c'est le truc qui marche (c'est déjà ça)
    mon problème c'est toujours de savoir si le fichier existe avant de proposer le téléchargement (oui je me répète...)

  13. #13
    Membre éclairé
    Avatar de kankrelune
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    763
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 763
    Points : 858
    Points
    858
    Par défaut
    avec file:// tu vas acceder à tes fichiers en local... pas à ceux du serveur distant... .. .

    @ tchaOo°

  14. #14
    Membre émérite

    Homme Profil pro
    Expert PHP
    Inscrit en
    Novembre 2004
    Messages
    2 127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Expert PHP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 127
    Points : 2 557
    Points
    2 557
    Par défaut
    bah il arrive à les récupérer donc si !!

    parce qu'il spécifie l'IP, mais je pige pas que tu puisses pas les lire.
    avec un file_get_content ?
    (voir php.net)

  15. #15
    Nouveau membre du Club
    Inscrit en
    Février 2004
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 55
    Points : 28
    Points
    28
    Par défaut
    Selon php.net les protocoles supportés pour fopen et "dérivés" :
    Toutes les versions de PHP. Explicitement avec le protocole file:// depuis PHP 4.3.0.

    /path/to/file.ext

    relative/path/to/file.ext

    fileInCwd.ext

    C:/path/to/winfile.ext

    C:\path\to\winfile.ext

    \\smbserver\share\path\to\winfile.ext

    file:///path/to/file.ext
    Effectivement file:// pour une url c'est seulement pour les fichiers locaux mais moi j'ai essayé (entre autres) \\smbserver\share\path\to\winfile.ext avec l'ip, avec le nom du serveur samba et ça plante toujours aussi bien.

    Pour le file_get_contents c'est comme pour le fopen, filesize, ... url incorrecte (failed to open stream: No such file or directory).

  16. #16
    Membre émérite

    Homme Profil pro
    Expert PHP
    Inscrit en
    Novembre 2004
    Messages
    2 127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Expert PHP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 127
    Points : 2 557
    Points
    2 557
    Par défaut
    juste, tu peux tester ta fonction en local ? (avec un fichier en local avec file://)

    pour voir si ca viens bien du serveur en face ?
    car après c'est plus un problème PHP, ça peut être un probleme de firewall à la glande sur l'autre pc etc ...

  17. #17
    Nouveau membre du Club
    Inscrit en
    Février 2004
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 55
    Points : 28
    Points
    28
    Par défaut
    scuse jsuis un peu boulet mais par local tu veus dire un fichier sur le serveur d'appli ou sur mon pc.

    En tout cas avec un fichier sur le serveur d'appli :
    - ça marche avec /var/www/html/application/.../plop.txt
    - ça marche pas avec file:///var/www/application/.../plop.txt

    est-ce moi qui me suis planté ??

  18. #18
    Membre émérite

    Homme Profil pro
    Expert PHP
    Inscrit en
    Novembre 2004
    Messages
    2 127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Expert PHP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 127
    Points : 2 557
    Points
    2 557
    Par défaut
    de la ou tu execute le script php, j'aurai voulu que tu essaie d'ouvrir et de tester l'existence d'un fichier ce sur meme pc.

    tu vois ? comme tu n'y arrives pas en essayant de tester un fichier sur un autre pc, autant d'abord essayer sur le meme pc

  19. #19
    Membre éclairé
    Avatar de kankrelune
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    763
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 763
    Points : 858
    Points
    858
    Par défaut
    Tu arrive à acceder au fichier distant via http, ftp... .. ?

    @ tchaOo°

  20. #20
    Nouveau membre du Club
    Inscrit en
    Février 2004
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 55
    Points : 28
    Points
    28
    Par défaut
    Non même avec une url de type file://C:/... même erreur

    et pas possible d'accéder au fichier via protocoles http ou ftp (c'est sur un serveur samba smb:// idem marche pas).

    Là j'avoue que ça bloque ...

    Pourtant (mais ça je pense que c'est logique) si je met n'importe laquelle des url testées (type file:// ou \\ip ou nom serveur\chemin\...) directement dans le navigateur ça passe ou encore si je teste l'appli quand elle est sur mon pc et non pas sur le serveur d'appli ça fonctionne bien (pas de problème pour accéder aux fichiers ou pour tester leur présence sur le serveur samba)

    lalala je deviens fou

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Accès à un fichier sur serveur distant
    Par s_n_r_k dans le forum PL/SQL
    Réponses: 2
    Dernier message: 28/12/2014, 11h40
  2. Réponses: 2
    Dernier message: 18/04/2007, 15h44
  3. Réponses: 3
    Dernier message: 01/03/2007, 10h18
  4. existence d'un fichier sur serveur distant
    Par Fabouney dans le forum Programmation et administration système
    Réponses: 3
    Dernier message: 17/01/2006, 10h18
  5. [Sybase] Accès Table sur serveur distant
    Par MashiMaro dans le forum Sybase
    Réponses: 5
    Dernier message: 11/02/2004, 14h09

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