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 :
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
> 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 ?
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?
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
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.
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);
?>
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\_*
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?
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.
julp.fr ~ PHP < 8.0.0 : activer les erreurs PDO/SQL ~ PHP < 8.1.0 : activer les erreurs mysqli
julp.fr ~ PHP < 8.0.0 : activer les erreurs PDO/SQL ~ PHP < 8.1.0 : activer les erreurs mysqli
julp.fr ~ PHP < 8.0.0 : activer les erreurs PDO/SQL ~ PHP < 8.1.0 : activer les erreurs mysqli
julp.fr ~ PHP < 8.0.0 : activer les erreurs PDO/SQL ~ PHP < 8.1.0 : activer les erreurs mysqli