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_get(c:/x/x/txt/.) failed to open stream: Permission denied


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Octobre 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Landes (Aquitaine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Octobre 2019
    Messages : 6
    Par défaut ftp_get(c:/x/x/txt/.) failed to open stream: Permission denied
    Bonjour,
    J'ai trouvé plusieurs discussions sur le sujet, essayé de nombreuses modifications, mais là, je sèche.
    Pourtant, la tâche semble facile à mettre en place : télécharger les fichiers d'un dossier FTP distant...avec ftp_get').
    Pas de problème sur la connexion ftp, j'arrive même à lister l'ensemble des fichiers de mon dossier FTP :

    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
    <?php
    $ftp_server = "server.dns-orange.fr";
    $ftp_user_name = "username";
    $ftp_user_pass = "password";
    $remote_dir = "data";
    $local_dir = "c:/wamp64/www/txt/";
    $dir = opendir($local_dir);
     
    $conn_id = ftp_connect($ftp_server, 21) or die("Impossible de se connecter au serveur $ftp_server"); // Mise en place d'une connexion basique
     
    $login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass); // Identification avec un nom d'utilisateur et un mot de passe
    ftp_pasv($conn_id, true);
    // Récupère la liste des fichiers du dossier FTP "data"
    $liste_fichiers = ftp_nlist($conn_id, $remote_dir);
    	foreach($liste_fichiers as $fichier)
    		{
    		echo $fichier;
     		echo "<br/>";
     		}
     
    closedir($dir);
    ftp_close($conn_id);
    ?>
    Mais lorsque je veux les télécharger avec ftp_get() :
    message d'erreur (Warning: ftp_get(c:/wamp64/www/txt/.): failed to open stream: Permission denied in C:\wamp64\www\hermes_ftp_get.php on line 26
    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
    <?php
    $ftp_server = "server.dns-orange.fr";
    $ftp_user_name = "username";
    $ftp_user_pass = "password";
    $remote_dir = "data";
    $local_dir = "c:/wamp64/www/txt/";
    $dir = opendir($local_dir);
     
    $conn_id = ftp_connect($ftp_server, 21) or die("Impossible de se connecter au serveur $ftp_server"); // Mise en place d'une connexion basique
     
    $login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass); // Identification avec un nom d'utilisateur et un mot de passe
    ftp_pasv($conn_id, true);
    // Récupère la liste des fichiers du dossier FTP "data"
    //ftp_chdir($conn_id, $remote_dir);
    $liste_fichiers = ftp_nlist($conn_id, $remote_dir);
    	foreach($liste_fichiers as $fichier)
    		{
    		if (ftp_get($conn_id, $local_dir.$fichier, $fichier, FTP_ASCII, 2)) //Téléchargement des fichiers dans le dossier local
    			{
     			echo "Ecriture des fichiers dans le dossier $local_dir réalisée avec succès\n";
    			}
    			else 
    				{
     				echo "Il y a un problème lors du téléchargement des fichiers depuis $remote_dir dans $local_dir\n";
     				echo "<br/>";
     				echo $local_dir.$fichier;
     				echo "<br/>";
     				}
    		}
     
    closedir($dir);
    ftp_close($conn_id);
    ?>
    Merci pour vos retours...

  2. #2
    Membre Expert Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 895
    Par défaut
    Bonjour,

    D'après le message d'erreur, on dirait que ton script essaye de télécharger le fichier ".".
    Or il s'agit d'un raccourcis pour dire "dossier courant" (tout comme ".." signifie "dossier parent").

    Dans ton script, essaye en vérifier que $fichier soit différent de "." et ".."

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    foreach ($liste_fichiers as $fichier) {
        if ($fichier !== "." && fichier !== "..") {
            // Instructions du téléchargement
        }
    }

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Octobre 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Landes (Aquitaine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Octobre 2019
    Messages : 6
    Par défaut
    Bonjour darkstar123456,

    Merci pour ta réponse.
    Effectivement, ton "if" permet d'éliminer les "fichiers" "." et "..", mais cela ne résous pas le problème principal : je peux lister les fichiers, mais pas les télécharger.
    Je joins une image des erreurs pour chaque fichier, qui me semble être bien trouvé...
    Nom : Sans titre.jpg
Affichages : 959
Taille : 440,5 Ko

  4. #4
    Membre émérite
    Homme Profil pro
    Touche à tout informatique autodidacte
    Inscrit en
    Janvier 2007
    Messages
    812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Touche à tout informatique autodidacte

    Informations forums :
    Inscription : Janvier 2007
    Messages : 812
    Par défaut
    Bonjour,
    As tu essayé de charger juste un seul fichier avec ftp_get?

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Octobre 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Landes (Aquitaine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Octobre 2019
    Messages : 6
    Par défaut
    Bonjour kabkab,

    Merci pour ta réponse, j'avais déjà essayé de ne télécharger qu'un seul fichier...avec le même résultat.

  6. #6
    Membre Expert Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 895
    Par défaut
    Rebonjour,

    As-tu bien les droits sur tous les fichiers en question pour pouvoir les télécharger ?
    S'ils appartiennent (par exemple) à "root" et qu'ils sont en chmod 644, ça veut dire que tu ne peux pas les télécharger !

    Par contre, je testais ton code de mon côté et je suis tombé sur quelque chose de peut-être intéressant.
    A la ligne 28 ftp_get($conn_id, $local_dir.$fichier, $fichier, FTP_ASCII, 2)) ça ne semble pas (tout à fait) correct.
    D'ailleurs, il ne fonctionnait pas chez moi.

    Par contre, celui-ci fonctionne chez moi : if (ftp_get($conn_id, $local_dir . basename($fichier), $fichier)) {
    Comme tu peux le voir, j'ai utilisé basename() car ftp_get() ne crée pas les dossiers à la volée, or $fichier retourne le chemin absolu du fichier et pas uniquement son nom.
    J'ai également retiré les 2 derniers paramètres car j'avais des erreurs chez moi ^^

    Voici mon code de test (qui ne reprend que les fichiers .php et qui ne sont pas "index.php"):

    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
    16
    17
    18
    $local_dir = dirname(__FILE__) . '/';
     
    $conn_id = ftp_connect($ftp_host, 21);
    $login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
    ftp_pasv($conn_id, TRUE);
     
    $liste_fichiers = ftp_nlist($conn_id, $remote_dir);
     
     
    foreach ($liste_fichiers AS $fichier) {
        if (preg_match('#\.php$#', basename($fichier)) && basename($fichier) !== "index.php") {
            if (ftp_get($conn_id, $local_dir . basename($fichier), $fichier)) {
                echo PHP_EOL . '<pre>Transfert OK : ' . print_r(basename($fichier), true) . '</pre>' . PHP_EOL;
            } else {
                echo PHP_EOL . '<pre>Transfert PAS OK : ' . print_r(basename($fichier), true) . '</pre>' . PHP_EOL;
            }
        }
    }

Discussions similaires

  1. Fpdf erreur : failed to open stream: Permission non ACCORDÉE
    Par Etibru dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 26/02/2018, 17h17
  2. failed to open stream: Permission denied
    Par HEDDI dans le forum Langage
    Réponses: 1
    Dernier message: 31/07/2010, 01h45
  3. Réponses: 1
    Dernier message: 02/09/2007, 14h45
  4. [FTP] Erreur "failed to open stream"
    Par Nefret dans le forum Langage
    Réponses: 2
    Dernier message: 04/11/2005, 19h53

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