Partage
  • Partager sur Facebook
  • Partager sur Twitter

Générer un fichier xml et l'envoyer sur ftp

    16 octobre 2018 à 17:07:49

    Bonjour à tous,

    Comme son nom l'indique, je veux générer dynamiquement un fichier xml et l'envoyer sur un ftp à la fin de la génération du fichier. A l'heure actuelle, j'ai ça :

    $xml = new SimpleXMLElement('<xml/>');
    	$Com= $xml->addchild('Com');
    		$infos=$Com->addchild('infos');
    			$datecrea=$infos->addchild('datecrea');
    			$num=$infos->addchild('num');
    			$numerobis=$infos->addchild('numerobis');
    		$envoi=$Com->addchild('envoi');
    			$facon=$envoi->addChild('facon', 'Standard');
    			$contact=$envoi->addChild('contact');
    				$companyName=$contact->addChild('companyName');
    				$firstName=$contact->addChild('firstName');
    				$email=$contact->addChild('email');
    				$lastName=$contact->addChild('lastName');
    				$phoneNumber=$contact->addChild('phoneNumber');
    			$addresse=$envoi->addChild('addresse');
    				$streetName=$addresse->addChild('streetName');
    				$houseNumber=$addresse->addChild('houseNumber');
    				$postalCode=$addresse->addChild('addresse');
    				$city=$addresse->addChild('city');
    				$country=$addresse->addChild('country');
    		$articles=$Com->addchild('articles');
    			$article=$articles->addChild('article');
    				$article->addAttribute("RFE", "");
    			$quantity=$articles->addChild('quantity');
    
    Header('Content-type: text/xml');
    print($xml->asXML());
    
     ?>

    Pour l'instant ça marche, en effet, quand je l'ouvre dans mon navigateur, j'ai bien du xml, mais maintenant, comment je fais pour l'envoyer sur un ftp, ou même plus simplement, pour générer un fichier qui se range localement?
    Question qui va avec, quand j'essaie d'appliquer une boucle dessus, j'ai immédiatement un message d'erreur, mais sachant que je vais devoir générer des fichiers xml dynamiquement, je fais comment sans effectuer de boucle?

    Merci d'avance pour vos réponses.

    -
    Edité par AlphonseDaudet1 16 octobre 2018 à 17:08:44

    • Partager sur Facebook
    • Partager sur Twitter
      16 octobre 2018 à 17:13:23

      > comment je fais pour l'envoyer sur un ftp, ou même plus simplement, pour générer un fichier qui se range localement?

      Tu peux relire la doc de SimpleXMLElement::asXML ? Elle a un paramètre prévu pour ...

      > quand j'essaie d'appliquer une boucle dessus, j'ai immédiatement un message d'erreur, mais sachant que je vais devoir générer des fichiers xml dynamiquement, je fais comment sans effectuer de boucle?

      Je n'ai strictement rien compris: une boucle (deux même ?) sur quoi ? Quel message d'erreur ? Pour quel code ?

      -
      Edité par julp 16 octobre 2018 à 17:14:42

      • Partager sur Facebook
      • Partager sur Twitter
        16 octobre 2018 à 18:09:49

        En fait, je cherche à récupérer les commandes de la dernière demie heure, que je les mette sous format xml et que j'envoie un fichier xml par commande. Ne faut-il pas faire une boucle pour ça?
        • Partager sur Facebook
        • Partager sur Twitter
          16 octobre 2018 à 18:14:44

          Sans doute. Mais encore fallait-il savoir de quoi il était question ...

          • Partager sur Facebook
          • Partager sur Twitter
            17 octobre 2018 à 15:05:12

            Bon, j'ai à peu près réglé le problème des boucles, on peut en faire à l'intérieur en fait, par contre, quand je fais $imprimer=$xml->asXml("doc.xml");
            par exemple, ça ne fonctionne pas, je reçois cette erreur : Erreur d’analyse XML : aucun élément trouvé
            Emplacement : http://localhost/blabla.php
            Numéro de ligne 1, Colonne 1 :
            ^

            Comment on fait du coup pour créer un fichier et l'envoyer sur un ftp? (j'ai consulté la doc, et j'ai rien trouvé à ce sujet)

            -
            Edité par AlphonseDaudet1 17 octobre 2018 à 15:24:17

            • Partager sur Facebook
            • Partager sur Twitter
              17 octobre 2018 à 16:10:31

              Il n'y a pas de validation à l'écriture et ça devrait générer un XML valide. Comment obtiens-tu cette erreur ? Tu ne file_put_contents pas $imprimer quand même ?

              > Comment on fait du coup pour créer un fichier et l'envoyer sur un ftp?

              simplexml et les autres extensions basées sur libxml2 ont éventuellement une subtilité dans la mesure où libxml2 peut éventuellement gérer d'elle-même http et ftp mais normalement, comme toute fonction php, si tu mets une URL ftp, ça devrait fonctionner sans rien voir à faire.

              EDIT : tiens, ça me rappelle que j'en avais fait une Q/R en plus

              -
              Edité par julp 17 octobre 2018 à 17:15:14

              • Partager sur Facebook
              • Partager sur Twitter
                17 octobre 2018 à 17:11:15

                Bon, j'ai trouvé une solution, un peu compliquée pour rien je pense, mais ça fonctionne, voilà ce que ça donne :

                $ftp_host     = 'ftp.mqksdjfm.com';
                $ftp_user     = 'qmlskjdf';
                $ftp_pass     = 'mqlskdjfm';
                $local_file   = 'C:\wamp64\www\qsefd\data_out.xml';
                $distant_file = 'www/qsdfsfd/qsdf'.date('H:i:s').'.xml';
                $xml = new SimpleXMLElement('<xml/>');
                    $Com= $xml->addchild('Com');
                        $infos=$Com->addchild('infos');
                            $datecrea=$infos->addchild('datecrea');
                            $num=$infos->addchild('num');
                            $numerobis=$infos->addchild('numerobis');
                        $envoi=$Com->addchild('envoi');
                            $facon=$envoi->addChild('facon', 'Standard');
                            $contact=$envoi->addChild('contact');
                                $companyName=$contact->addChild('companyName');
                                $firstName=$contact->addChild('firstName');
                                $email=$contact->addChild('email');
                                $lastName=$contact->addChild('lastName');
                                $phoneNumber=$contact->addChild('phoneNumber');
                            $addresse=$envoi->addChild('addresse');
                                $streetName=$addresse->addChild('streetName');
                $houseNumber=$addresse->addChild('houseNumber');
                                $postalCode=$addresse->addChild('addresse');
                                $city=$addresse->addChild('city');
                                $country=$addresse->addChild('country');
                        $articles=$Com->addchild('articles');
                            $article=$articles->addChild('article');
                                $article->addAttribute("RFE", "");
                            $quantity=$articles->addChild('quantity');
                 
                file_put_contents('data_out.xml',$xml->saveXML());
                
                $conn_id = ftp_connect($ftp_host);
                // on se connecte en tant qu'utilisateur
                $login_result = ftp_login($conn_id, $ftp_user, $ftp_pass);
                // on active le mode passif 
                ftp_pasv($conn_id, true);
                // si on est connecté avec succès, on transfère le fichier
                if($login_result && ftp_put($conn_id, $distant_file, $local_file, FTP_ASCII)){
                	// si le transfert a fonctionné, on supprime le fichier local
                	unlink($local_file);
                	echo "qsdf";
                }
                // on clos la connexion
                ftp_close($conn_id);
                
                 
                 ?>



                • Partager sur Facebook
                • Partager sur Twitter
                  19 octobre 2018 à 9:33:15

                  Petit problème, quelqu'un saurait quelle est l'adresse locale d'un fichier sur un ftp? Ca marche parfaitement en local mais pas en ligne.

                  Au niveau du $local_file, je dois entrer quoi?

                  -
                  Edité par AlphonseDaudet1 19 octobre 2018 à 9:34:18

                  • Partager sur Facebook
                  • Partager sur Twitter
                    19 octobre 2018 à 11:34:55

                    Utilises un chemin relatif ... Si vraiment tu veux de l'absolu, bases-toi sur __DIR__ sinon, pire, l'hardcoder (ce qui ne sera pas portable), récupères le chemin côté serveur via les fonctions realpath, getcwd, etc.

                    Avais-tu vu (et lu) mon lien parce qu'il n'était pas nécessaire d'utiliser les fonctions ftp\_*

                    -
                    Edité par julp 19 octobre 2018 à 11:36:57

                    • Partager sur Facebook
                    • Partager sur Twitter
                      12 novembre 2018 à 11:15:43

                      Bonjour, 

                      J'ai bien lu ton lien, mais  je n'ai pas compris comment connecter à un ftp, du coup, j'ai fait comme j'ai pu. La mise en ligne sur le ftp ne fonctionne d'ailleurs plus alors que le code n'a pas changé. Comment je fais pour envoyer sur ftp sans utiliser les fonctions ftp du coup? 

                      • Partager sur Facebook
                      • Partager sur Twitter

                      Générer un fichier xml et l'envoyer sur ftp

                      × 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