Maison >interface Web >js tutoriel >Comment créer un serveur de proxy XML à JSON dans PHP

Comment créer un serveur de proxy XML à JSON dans PHP

William Shakespeare
William Shakespeareoriginal
2025-03-02 00:13:09810parcourir

Cet article démontre la construction d'un serveur de proxy JSON PHP XML à JSON. Cette approche offre une solution pratique pour tirer parti des avantages de l'échange de données XML tout en simplifiant les interactions JavaScript côté client en utilisant le format JSON plus rationalisé.

How to Create an XML to JSON Proxy Server in PHP

Avantages clés:

  • JavaScript simplifié: Évite les complexités de la manipulation directe de XML en javascript.
  • Échange de données XML: maintient l'utilisation de XML pour l'échange de données entre divers systèmes.
  • Traitement JSON efficace: Le traitement côté client est plus rapide et plus facile avec JSON.
  • Accès au domaine croisé: permet d'accéder aux services Web sur différents domaines, une limitation souvent rencontrée avec des solutions purement javascript.
  • Filtrage de données (potentiel): Le serveur proxy peut potentiellement être étendu pour filtrer les données inutiles, réduisant la taille de la charge utile.

comment cela fonctionne:

Le système comprend deux parties: un serveur proxy PHP et un client JavaScript.

  1. Client JavaScript: Envoie une demande ajax au proxy PHP, y compris l'URL XML cible en tant que paramètre GET (url).
  2. PHP Proxy Server:
    • utilise Curl pour récupérer les données XML de l'URL spécifiée.
    • analyse le XML en utilisant SimpleXMLElement.
    • convertit le XML analysé en JSON en utilisant json_encode.
    • Renvoie les données JSON au client JavaScript. Comprend la gestion des erreurs pour empêcher les erreurs de PHP d'atteindre le client.

Code php (xmlproxy.php):

Le script PHP utilise la suppression des erreurs (ini_set('display_errors', false)) et un gestionnaire d'exception personnalisé (ReturnError()) pour une gestion des erreurs robuste. Il récupère les données XML à l'aide de Curl, la convertit en JSON et renvoie le résultat. Si une erreur se produit pendant la récupération ou l'analyse, un indicateur d'erreur JSON est renvoyé.

<?php
ini_set('display_errors', false);
set_exception_handler('ReturnError');

$r = '';
$url = (isset($_GET['url']) ? $_GET['url'] : null);

if ($url) {
    $c = curl_init();
    curl_setopt_array($c, array(
        CURLOPT_URL => $url,
        CURLOPT_HEADER => false,
        CURLOPT_TIMEOUT => 10,
        CURLOPT_RETURNTRANSFER => true
    ));
    $r = curl_exec($c);
    curl_close($c);
}

if ($r) {
    echo json_encode(new SimpleXMLElement($r));
} else {
    ReturnError();
}

function ReturnError() {
    echo '{"error":true}';
}
?>

Code javascript (proxy.html - exemple):

Le code JavaScript définit l'URL XML distante, fait une demande AJAX au proxy PHP et gère la réponse JSON. Il utilise une repli pour les navigateurs plus âgés dépourvus de natifs JSON.parse.

// example XML feed
var url = "http://domain.com/example.xml?status=123&date=2011-01-01";

// AJAX request
var xhr = (window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP"));
xhr.onreadystatechange = XHRhandler;
xhr.open("GET", "xmlproxy.php?url=" + escape(url), true);
xhr.send(null);

// handle response
function XHRhandler() {
    if (xhr.readyState == 4) {
        var json;
        if (JSON && JSON.parse) {
            json = JSON.parse(xhr.responseText);
        } else {
            eval("var json = " + xhr.responseText);
        }
        console.log(json);
        xhr = null;
    }
}

Gestion des attributs XML:

La fonction json_encode dans PHP gère les attributs XML en créant un objet @attributes dans la sortie JSON.

Questions fréquemment posées (FAQ):

La section FAQ fournie offre un aperçu complet des différences XML et JSON, des techniques de conversion, de la gestion des erreurs et des stratégies d'optimisation dans le contexte de PHP.

N'oubliez pas de déployer xmlproxy.php et votre fichier JavaScript (par exemple, proxy.html) à un serveur Web avec PHP activé. Remplacez "http://domain.com/example.xml?status=123&date=2011-01-01" par votre URL de source de données XML réelle.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn