IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Envoyez donnez et lire XML serveur distant


Sujet :

Langage PHP

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    691
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 691
    Points : 362
    Points
    362
    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?

  2. #2
    Membre expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Points : 3 212
    Points
    3 212
    Par défaut
    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.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    691
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 691
    Points : 362
    Points
    362
    Par défaut
    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.

  4. #4
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 778
    Points
    17 778
    Par défaut
    Voici une fonction générique pour faire cela en PHP 5 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    691
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

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

    voila mon code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $url = 'http://XXXXXX/fichier.asmx/GetElement';
    $param = array ('code'=>'fvar','id'=>'var2');
    recuperer_page_http($url, 10, $nom_local , $param);

  6. #6
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 778
    Points
    17 778
    Par défaut
    Que vous donne ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 ?

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    691
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 691
    Points : 362
    Points
    362
    Par défaut
    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/

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [SimpleXML] récupérer un fichier xml du serveur distant
    Par nadiaflamingenierie dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 06/10/2008, 14h30
  2. ouvrir et lire un fichier sur serveur distant
    Par coco441 dans le forum C++
    Réponses: 4
    Dernier message: 04/09/2007, 13h26
  3. Envoi XML serveur distant
    Par webrider dans le forum Langage
    Réponses: 3
    Dernier message: 03/08/2007, 20h55
  4. lire/écrire sur un fichier texte sur un serveur distant
    Par nabmoah dans le forum Visual C++
    Réponses: 6
    Dernier message: 12/02/2007, 10h27
  5. Lire une vidéo stockée sur serveur distant
    Par zoidy dans le forum Bibliothèques et frameworks
    Réponses: 5
    Dernier message: 22/05/2006, 13h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo