Partage
  • Partager sur Facebook
  • Partager sur Twitter

Telechargement avec ftp_get impossible

    20 juin 2018 à 4:43:55

    Bonjour,

    c'est la première fois que j'essaie des connexions ftp dans mes scripts php

    sans résultats depuis plusieurs jours j'ai essayé différentes méthodes pour récupérer des fichier pdf qui se trouve sur un serveur (linux dans une DMZ chez moi) distant et les stocker sur mon site WEB (stocké chez OVH), et ensuite faire des liens de téléchargement qui se stockerait sur le C:/ d'un PC Windows.

    je me tourne vers votre communauté pour savoir si quelqu'un aurait une explication au problème

    1) Voici le code pour ce qui est de la connexion au serveur et du téléchargement des pdf du serveur vers mon site

    <?php
    	
    			$ftp_server = "xxxx";
    			$ftp_user = "xxxx";
    			$ftp_pass = "xxxx";
    			$port_ftp = xxxx;
    			$port_ssh = xxxx;
    			
    			//version ftp 
    			// Mise en place d'une connexion ftp
    			$connexion = ftp_connect($ftp_server , $port_ftp); //or die("Couldn't connect to $ftp_server");
    				//identification
    				if (@ftp_login($connexion, $ftp_user, $ftp_pass)) {
    					if(ftp_pasv($connexion, true)){
    						$liste_fichiers = ftp_nlist($connexion, '.');
    						foreach($liste_fichiers as $fichier)
    						{
    							echo '<a href="?filename=' .$fichier. '">' .$fichier. '</a><br/>';
    						}
    						if(isset($_GET['filename']))
    						{
    							$nom_fichier = $_GET['filename'];
    							ftp_get($connexion, "/", $fichier, FTP_BINARY);
    						}
    						$commande = shell_exec ('pwd');
    						if(ftp_exec($connexion, "pwd"))
    						{
    							echo 'La commande a réussi !';
    						}
    						else
    						{
    							echo 'La commande a échoué !';
    							echo "$commande";	
    						}
    					} 		
    					else {
    						echo "Il y a un problème\n";
    					}
    				}
    		    
    			else {
    				echo "Connexion impossible en tant que $ftp_user\n";
    			}
    
    			// Fermeture de la connexion
    			ftp_close($conn_id);	
    		
    	

    La connexion fonctionne mais quand je clique sur le PDF rien ne se passe sauf une modification de l'url qui passe de https://xxx/xxx/.php à https://xxx/xxx.php?filename=xxx.pdf

    2) et en ce qui concerne le télechargements, le code quasiment le même sauf que je remplace "/" par "C:/" et c'est le même soucis juste l'url qui change mais rien ne se passe .

    <?php
    			$ftp_server = "xxx";
    			$ftp_user = "xxx";
    			$ftp_pass = "xxx";
    			$port_ftp = xxx;
    			$port_ssh = xxx;
    			
    			//version ftp 
    			// Mise en place d'une connexion ftp
    			$connexion = ftp_connect($ftp_server , $port_ftp)or die("Couldn't connect to $ftp_server");
    			//autre..
    			
    			
    			// Tentative d'identification
    				if (@ftp_login($connexion, $ftp_user, $ftp_pass)) {
    					if(ftp_pasv($connexion, true)){
    						$liste_fichiers = ftp_nlist($connexion, '/www/pdf/boutique/be_star');
    						foreach($liste_fichiers as $fichier)
    						{
    							echo '<a href="?filename=' .$fichier. '">' .$fichier. '</a><br/>';
    						}
    						if(isset($_GET['filename']))
    						{
    							$nom_fichier = $_GET['filename'];
    							ftp_get($connexion, "C:/", $nom_fichier, FTP_BINARY);
    						}
    					} 		
    					else {
    						echo "Il y a un problème\n";
    					}
    				}
    		    
    			else {
    				echo "Connexion impossible en tant que $ftp_user\n";
    			}
    
    			// Fermeture de la connexion
    			ftp_close($conn_id);
    ?>



    Donc les 2 problèmes sont similaires mais je n'arrive pas à savoir ce qui cloche,
    Si vous pourriez m'aider ce serait sympa :)

    Merci d'avance pour ceux qui prendront le temps de lire ce post.

    -
    Edité par nicolas varlet 20 juin 2018 à 5:09:52

    • Partager sur Facebook
    • Partager sur Twitter
      20 juin 2018 à 7:41:06

      En même temps tu ne test le retour de ftp_get!

      Donc tu ne sauras jamais ce qu'il c'est passé.

      Et tu penses que tu as le droit de télécharger un fichier à la racine de ton serveur? Si tu remplace '/' par '/tmp' pour voir ?

      • Partager sur Facebook
      • Partager sur Twitter
      $2b||!$2b
        20 juin 2018 à 10:12:49

        Toujours le même résultat, petite précision : le script php se trouve sur mon site et je souhaite télécharger une doc qui se trouve sur un serveur distant,

        donc ce serait plus quelque chose comme ça par exemple non ?  :

        ftp_get($connexion, "/www/", "/tmp/pdf.pdf" , FTP_BINARY);

         Merci !

        J'ai essayé en les inversant et sans mettre de variable (directement le chemin) mais toujours le même résultat :/





        -
        Edité par nicolas varlet 20 juin 2018 à 10:32:04

        • Partager sur Facebook
        • Partager sur Twitter
          20 juin 2018 à 21:05:51

          ftp_get() a besoin du nom du fichier aussi:

          <?php
          
          $localTargetPath = '/tmp/monPdf.pdf';
          $distantTargetPath = '/www/monPdf.pdf';
          
          if (!ftp_get($connexion, $localTargetPath, $distantTargetPath, FTP_BINARY)) {
              throw new Exception(sprintf('Unabled to download file from distant %s to local %s', $distantTargetPath, $localTargetPath));
          }



          • Partager sur Facebook
          • Partager sur Twitter
          $2b||!$2b
            21 juin 2018 à 15:21:54

            C'est très étrange mais ton script fait planter la page,

            Si je le decommente --> page blanche mais commenté --> tout fonctionne bien, je ne vois pas pourquoi car il ne semble pas con tenir d'erreur, enfin...pour moi :)

            • Partager sur Facebook
            • Partager sur Twitter
              21 juin 2018 à 15:46:09

              Si tu caches les erreurs PHP c'est normal que tu es une page blanche!

              Ne jamais cacher les erreurs en DEV! Dans ton php.ini il faut que tu mettes/corriges cette ligne:

              error_reporting = E_ALL



              • Partager sur Facebook
              • Partager sur Twitter
              $2b||!$2b
                21 juin 2018 à 17:51:50

                En fait il est dans mon php.ini, mais même si il est bien détecté comme un fichier de configuration il ne fonctionne pas (certainement car je l'ai crée à la main...)

                J'ai essayé de mettre error_reporting = E_ALL directement dans la page concerné mais ça n'a rien donné non plus ci-dessous un peu plus du code concernant la page

                l

                la page fonctionne bien si je comment la partie de code :

                <?php
                 
                $localTargetPath = '/tmp/monPdf.pdf';
                $distantTargetPath = '/www/monPdf.pdf';
                 
                if (!ftp_get($connexion, $localTargetPath, $distantTargetPath, FTP_BINARY)) {
                    throw new Exception(sprintf('Unabled to download file from distant %s to local %s', $distantTargetPath, $localTargetPath));
                }

                PS : la page s'identifie et se connecte bien au ftp et certaines fonction, comme ftp_nlist fonctionne également.

                ne pas tenir compte de la condition isset($_POST[url]) l'url n'est pas utilisé pour l'instant je met juste un caractere pour lancer la boucle en attendant que le ftp fonctionne

                La ligne ftp_fget( $connexion, $handle, $remote_file ,ftp_ASCII 0) ;n'est pas le probleme c'etait juste un essai, sinon j'utilisait principalement ftp_get( $connexion, $handle, $remote_file ,ftp_BINARY).

                -
                Edité par nicolas varlet 21 juin 2018 à 18:32:07

                • Partager sur Facebook
                • Partager sur Twitter
                  22 juin 2018 à 7:37:11

                  Bizarre!

                  Mais bon, le fait qu'il s'arrête m'indique bien qu'il y a un soucis.

                  Puisque le throw Exception, arrête le script et affiche un message. Là il arrête bien ton script, mais n'affiche pas le message.

                  Ce qui veux dire qu'il n'arrive pas à copier ton fichier.

                  Essaye ceci au début de ton code PHP:

                  error_reporting(E_ALL);
                  ini_set("display_errors", 1);

                  Regarde dans tes logs si tu n'as pas d'erreur.

                  Moi, les cas où cela ne copiait pas sont les suivants:

                  - Pas le droit d'écriture dans le dossier local

                  - Ne trouve pas le fichier d'origine

                  - Pas en mode passif

                  - Pas en mode actif (et oui ça dépend des FTP)

                  - Le dossier n'existe pas en local 

                  - Le dossier n'existe pas sur le serveur. Quand tu as un chemin du style /monDossier/monFichier.pdf'

                  Et je crois que c'est tout mais j'ne suis pas sur :p

                  Donc vérifie déjà tout ça

                  • Partager sur Facebook
                  • Partager sur Twitter
                  $2b||!$2b

                  Telechargement avec ftp_get impossible

                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                  • Editeur
                  • Markdown