Précédent   Forum des professionnels en informatique > PHP > Langage > Fichiers
Fichiers Forum d'entraide sur les fichiers avec PHP. Avant de poster -> FAQ fichiers et Sources fichiers
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 22/05/2007, 15h08   #1
Membre éclairé
 
Inscription : décembre 2004
Messages : 658
Détails du profil
Informations personnelles :
Âge : 29
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : décembre 2004
Messages : 658
Points : 317
Points : 317
Par défaut Envoyez donnez et lire XML serveur distant

Bonjour, je dois envoyer des données sur un serveur distant et recuperer le fichier XML comment je peux faire?
zulot est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/05/2007, 15h16   #2
Membre Expert
 
Inscription : janvier 2005
Messages : 2 288
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 2 288
Points : 2 287
Points : 2 287
Pourrais tu donner plus de détails? Comment envoies-tu les données, quel rapport avec le fichier XML en retour? Est-ce une adresse distante (autre site)? etc.
koopajah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/05/2007, 15h22   #3
Membre éclairé
 
Inscription : décembre 2004
Messages : 658
Détails du profil
Informations personnelles :
Âge : 29
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : décembre 2004
Messages : 658
Points : 317
Points : 317
Alros j'envoie les données par post qui genere un fichier xml en fonction de celle ci.
Ca j'arrive a faire.

Le fichier xml est sur un serveur distant autre site.

Je voudrait en fait recuperer tout le fichier xml dans une string php pour mon site.
zulot est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/05/2007, 16h02   #4
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
Voici une fonction générique pour faire cela en PHP 5 :
Code :
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
function recuperer_page_http($url, $timeout = 10, $nom_local = '', $post = NULL) {
    if (extension_loaded('curl')) {
        $ch = curl_init($url);
        curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
        if ($nom_local) {
            $fp = fopen($nom_local, 'w') or die("Le fichier '$nom_local' n'a pu être ouvert en écriture");
            curl_setopt($ch, CURLOPT_FILE, $fp);
        } else {
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
        }
        if ($post) {
            curl_setopt($ch, CURLOPT_POST, TRUE);
            curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
        }
        $ret = curl_exec($ch);
        if ($nom_local) {
            fclose($fp);
        }
        curl_close($ch);
        if ($ret === FALSE) {
            die("Une erreur a été rencontrée : " . curl_error());
        }
        return $ret;
    } elseif (ini_get('allow_url_fopen') && in_array(parse_url($url, PHP_URL_SCHEME), stream_get_wrappers())) {
        $infos = parse_url($url);
        $contexte = NULL;
        if (isset($infos['user']) || $post) {
            $options = array(
                'http' => array(
                    'method' => $post ? 'POST' : 'GET',
                    'header' => '',
                    'timeout' => $timeout // Effectif pour les versions 5.2.1 et supérieures
                )
            );
            if (isset($infos['user'])) {
                $options['http']['header'] .= 'Authorization: Basic ' . base64_encode($infos['user'] . ':' . $infos['pass']) . "\r\n";
            }
            if ($post) {
                $data = http_build_query($post);
                $options['http']['header'] .= "Content-type: application/x-www-form-urlencoded\r\n";
                $options['http']['header'] .= 'Content-Length: ' . strlen($data) . "\r\n";
                $options['http']['content'] = $data;
            }
            $contexte = stream_context_create($options);
        }
        if (!$nom_local) {
            return file_get_contents($url, FALSE, $contexte);
        } else {
            $in = fopen($url, 'r', FALSE, $contexte);
            stream_set_timeout($in, $timeout);
            $out = fopen($nom_local, 'w') or die("Le fichier '$nom_local' n'a pu être ouvert en écriture");
            while (!feof($in)) {
                fwrite($out, fread($in, 1024));
            }
            fclose($in);
            fclose($out);
        }
    } elseif (function_exists('fsockopen')) {
        $infos = parse_url($url);
        if ($nom_local) {
            $out = fopen($nom_local, 'w') or die("Le fichier '$nom_local' n'a pu être ouvert en écriture");
        }
        if (empty($infos['path'])) {
            $infos['path'] = '/';
        }
        if (!isset($infos['port'])) {
            if ($infos['scheme'] == 'http') {
                $infos['port'] = 80;
            } elseif ($infos['scheme'] == 'https') {
                $infos['port'] = 443;
            }
        }
        @ $fp = fsockopen($infos['host'] == 'https' ? 'ssl://' . $infos['host'] : $infos['host'], $infos['port'], $errno, $errstr, $timeout);
        if (!$fp) {
            return FALSE;
        }
        stream_set_timeout($fp, $timeout);
        $requete = ($post ? 'POST ' : 'GET ') . $infos['path'] . '?'  . (isset($infos['query']) ? $infos['query'] : '') . " HTTP/1.1\r\n";
        $requete .= 'Host: ' . $infos['host'] . ':' . (isset($infos['port']) ? $infos['port'] : '80') . "\r\n";
        if (isset($infos['user'])) {
            $requete .= 'Authorization: Basic ' . base64_encode($infos['user'] . ':' . $infos['pass']) . "\r\n";
        }
        if ($post) {
            $data = http_build_query($post);
            $requete .= "Content-type: application/x-www-form-urlencoded\r\n";
            $requete .= 'Content-Length: ' . strlen($data) . "\r\n";
        }
        fwrite($fp, $requete . "\r\n" . $data);
        $buffer = '';
        do { // Saut de l'entête HTTP
            $buffer .= fgets($fp, 1024);
        } while (!feof($fp) && strpos($buffer, "\r\n\r\n") === FALSE);
        $buffer = '';
        while (!feof($fp)) {
            $buffer .= fread($fp, 1024);
        }
        $buffer = ltrim($buffer);
        $pos = strpos($buffer, "\r\n");
        $len = hexdec(substr($buffer, 0, $pos));
        $buffer = substr($buffer, $pos + strlen("\r\n"), $len);
        if ($nom_local) {
            fwrite($out, $buffer);
            fclose($out);
            $buffer = TRUE;
        }
        fclose($fp);
        return $buffer;
    } else {
        die("Aucune méthode permettant de récupérer la source d'une page n'est disponible");
    }
}
  • url : l'URL distante à interroger
  • timeout : temps maximal d'exécution et/ou de connexion (en secondes)
  • nom_local : nom du fichier où enregistrer le corps de la page obtenu. S'il n'est pas utilisé (valeur fausse), elle renverra celui-ci sous la forme d'une chaîne
  • post : les données POST à envoyer sous la forme d'une chaîne encodée ou un tableau associant la clé à sa valeur
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/05/2007, 16h19   #5
Membre éclairé
 
Inscription : décembre 2004
Messages : 658
Détails du profil
Informations personnelles :
Âge : 29
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : décembre 2004
Messages : 658
Points : 317
Points : 317
Je dois un peu bete en cette fin de journée mais j'arrive pas a la faire fonctionner.

voila mon code

Code :
1
2
3
4
 
$url = 'http://XXXXXX/fichier.asmx/GetElement';
$param = array ('code'=>'fvar','id'=>'var2');
recuperer_page_http($url, 10, $nom_local , $param);
zulot est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/05/2007, 16h45   #6
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
Que vous donne ?
Code :
var_dump(recuperer_page_http('http://XXXXXX/fichier.asmx/GetElement', 10, '', array('code'=>'fvar','id'=>'var2')));
(aucun message d'erreur ?)

Disposez-vous de cURL ou alors allow_url_fopen est-il à On sur votre serveur ?
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2007, 19h42   #7
Membre éclairé
 
Inscription : décembre 2004
Messages : 658
Détails du profil
Informations personnelles :
Âge : 29
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : décembre 2004
Messages : 658
Points : 317
Points : 317
DSL c'est apache l'activation d'erreur est desactivé...
Du coup je suis revenu a quelque chose de plus simple qui fonctionnait à la base dsl/
zulot 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 21h43.


 
 
 
 
Partenaires

Hébergement Web