Précédent   Forum des professionnels en informatique > PHP > Langage > Débuter
Débuter Forum d'entraide pour débuter en PHP. Avant de poster -> Cours PHP, FAQ PHP, Outils PHP, etc.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 28/09/2011, 22h26   #1
Futur Membre du Club
 
Inscription : juillet 2007
Messages : 81
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 81
Points : 17
Points : 17
Par défaut Télécharger un fichier distant avec une URL dynamique

Bonjour,

Je dois pour une de mes applications télécharger un fichier XML depuis un serveur distant sur mon serveur de production.

J'utilise pour ce faire la commande:
Code :
exec('wget http://un-site.com/un-fichier.xml');
Cette commande marche sur mon serveur de production avec des fichiers contenant une extension valable (testé avec des fichiers de 60Mo).

Mon problème c'est que je dois télécharger un fichier avec une URL dynamique du genre: http://un-site.com/application.php?i...r=334324343423

Avec la commande que j'utilise, je récupère bien le fichier mais celui est tronqué (mauvaise taille et code XML contenant des erreurs).

Auriez-vous une solution pour télécharger des fichiers via des urls dynamique? Merci d'avance pour votre aide
clement106 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/09/2011, 00h59   #2
Modérateur
 
Inscription : septembre 2010
Messages : 7 131
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 131
Points : 8 491
Points : 8 491
aucun interet a utilise wget, PHP fait ça très bien tout seul, un simple copy suffit
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/09/2011, 10h56   #3
Membre actif
 
Homme Florian
Chef de projet NTIC
Inscription : novembre 2004
Messages : 205
Détails du profil
Informations personnelles :
Nom : Homme Florian
Âge : 26
Localisation : France, Hauts de Seine (Île de France)

Informations professionnelles :
Activité : Chef de projet NTIC
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : novembre 2004
Messages : 205
Points : 159
Points : 159
Si tu souhaites faire un traitement sur ce que contient le fichier, tu peux aussi faire un file_get_contents() qui lui retourne un string avec le contenu du fichier au lieu de le placer sur le disque.
NaeiKinDus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/09/2011, 21h31   #4
Futur Membre du Club
 
Inscription : juillet 2007
Messages : 81
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 81
Points : 17
Points : 17
Merci infiniment stealth35.

Mais pourquoi je me suis embêté avec cette commande... j'ignorais complétement que la fonction copy() marchait aussi avec des fichiers distants.

Citation:
Si tu souhaites faire un traitement sur ce que contient le fichier, tu peux aussi faire un file_get_contents() qui lui retourne un string avec le contenu du fichier au lieu de le placer sur le disque.
Merci pour cette info. J'ai besoin d'avoir le(s) fichier(s) XML sur le serveur pour ensuite pouvoir les parcourir avec la classe SimpleXML.
Au tout départ j'utilisais justement cette fonction mais j'avais tout de suite un super warning: Limit memory...

Voilà déjà un problème de résolu. Il ne m'en reste plus qu'un...arriver à télécharger un fichier XML de 180Mo avec un max_execution_time de 60 secondes...

Ca fera surement l'objet d'un nouveau poste.
clement106 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/09/2011, 22h04   #5
Rédacteur/Modérateur
 
Avatar de Thes32
 
Homme
Développeur Web
Inscription : décembre 2006
Messages : 2 335
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : décembre 2006
Messages : 2 335
Points : 3 774
Points : 3 774
Citation:
Envoyé par clement106 Voir le message
Merci pour cette info. J'ai besoin d'avoir le(s) fichier(s) XML sur le serveur pour ensuite pouvoir les parcourir avec la classe SimpleXML.
SimpleXML accepte également des fichiers distants...
Code :
1
2
 
$XMLObjet = new SimpleXMLElement( 'http://un-site.com/un-fichier.xml', NULL, true );
__________________
Développeur | Zend Certified Engineer

Étapes Pour mieux se servir du forum:
1. Commencez par lire les cours et tutoriels ;
2. Faites une recherche;
3. Faites un post si rien trouvé dans les deux étapes précédentes en respectant les règles;

Nix>_Rien n'est plus pratique que la théorie
Thes32 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/09/2011, 22h17   #6
Futur Membre du Club
 
Inscription : juillet 2007
Messages : 81
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 81
Points : 17
Points : 17
Quand je saurais tout

En fait je suis quand même obligé de le télécharger à cause de mon max_execution_time

Le but est de télécharger un fichier XML référencent des produits d'un e-commerce et de les placer dans ma propre base de données MySQL.

Le téléchargement d'un fichier de 20Mo prend déjà plusieurs 10 aines de secondes, du coûps il ne me reste plus assez de temps pour faire plusieurs centaines d' enregistrements dans ma base de données. J'ai donc créé un Cron qui télécharge / met à jour le fichier et un deuxième qui s'occupe de le parser pour ensuite enregistrer les produits dans ma base de données.

Si j'essaye de lire mon fameux fichier à distance avec la classe SimpleXML, avant qu'elle puisse l'utiliser il y aura déjà heu le fameux execution_time_limit.

Je pense que le seul moyen serait de prendre un serveur dédié pour pouvoir modifier ce fameux réglage...
clement106 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/09/2011, 09h35   #7
Modérateur
 
Inscription : septembre 2010
Messages : 7 131
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 131
Points : 8 491
Points : 8 491
si ton fichier XML est gros faut le lire en streaming avec XML Parser, ensuite tu pourra mettre les sous parties avec SimpleXML
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/09/2011, 17h29   #8
Futur Membre du Club
 
Inscription : juillet 2007
Messages : 81
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 81
Points : 17
Points : 17
Merci pour l'info.

J'ai quand même de la peine à comprendre. Avant que PHP puisse lire le fichier qui se trouve sur le serveur distant, il faut déjà qu'il le télécharge dans son entièreté?
Si c'est le cas le max_execution_time sera déjà dépassé.

J'ai trouvé un lien qui pourrait aller dans ton sens si je t'ai bien compris:
http://dsampaolo.com/blog/42-parser-...xmlreader.html
clement106 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/09/2011, 17h36   #9
Modérateur
 
Inscription : septembre 2010
Messages : 7 131
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 131
Points : 8 491
Points : 8 491
Citation:
Envoyé par clement106 Voir le message
J'ai quand même de la peine à comprendre. Avant que PHP puisse lire le fichier qui se trouve sur le serveur distant, il faut déjà qu'il le télécharge dans son entièreté?

pas en stream, il va le lire séquentiellement
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h43.


 
 
 
 
Partenaires

Hébergement Web