2010-09-01 5 views
0

On dirait que la question a été supprimée lorsque j'ai collé du code.Peut-être créer une classe PHP? Comment couper et rendre un exemple de script plus dynamique

J'ai inclus deux fonctions ci-dessous. L'une est une fonction de connexion et d'obtention d'un identifiant de session, et cette dernière fonction sert à obtenir des métadonnées, qui utilisent l'identifiant de session obtenu à partir de Login(); fonction.

J'ai le sentiment que ce script peut être nettoyé énormément, mais chaque fois que je tente de le faire, il se casse.

Y at-il une façon plus élégante d'envoyer des données que fput? Existe-t-il une manière plus élégante d'analyser une réponse XML à l'aide de between(); avant(); et après(); les fonctions? Ce script peut-il être rendu plus dynamique pour éventuellement être utilisé dans une bibliothèque de toutes sortes?

je comprendre comment les classes PHP peuvent être utilisés, mais je n'ai pas où commencer.

<?php 

    function Login() { 

    // Host, Servlet, Port, and Time Out information 
    $host='host.example.com'; 
    $servlet='XMLAPI'; 
    $port='80'; 
    $time_out='20'; 

    // Username and Password Variables 

    $username = 'SomeUserId'; 
    $password = 'Somepassword'; 

    $sock = fsockopen ($host, $port, $errno, $errstr, $time_out); 
    $data = "xml=<?xml version=\"1.0\"?><Envelope><Body><Login>"; 
    $data .= "<USERNAME>" . $username . "</USERNAME>"; 
    $data .= "<PASSWORD>" . $password . "</PASSWORD>"; 
    $data .= "</Login></Body></Envelope>"; 
    $size = strlen ($data); 

     if (!$sock) { 
      print("Could not connect to host:". $errno . $errstr); 
      return (false); 
     } 

    fputs ($sock, "POST /servlet/" . $servlet . " HTTP/1.1\n"); 
    fputs ($sock, "Host: " . $host . "\n"); 
    fputs ($sock, "Content-type: application/x-www-form-urlencoded\n"); 
    fputs ($sock, "Content-length: " . $size . "\n"); 
    fputs ($sock, "Connection: close\n\n"); 
    fputs ($sock, $data); 
    $buffer = ""; 

     while (!feof ($sock)) { 
     $buffer .= fgets ($sock); 
     } 

    fclose ($sock); 
    //print ($buffer); 
    return ($buffer); 

    } 

    $xml_response = Login(); 
    session_start(); 
    $_SESSION['JsessionID'] = between ("<SESSION_ENCODING>","</SESSION_ENCODING>", $xml_response); 


    function GetMetaData() { 

    // List metadata id 
    $list_id = "7238776"; 

    // Assign JSessionID from Login(); 
    $JsessionID = $_SESSION['JsessionID']; 

    // Host, Servlet, Port, and Time Out information 
    $host='host.example.com'; 
    $servlet = 'XMLAPI' . $JsessionID; 
    $port='80'; 
    $time_out='20'; 

    $sock = fsockopen ($host, $port, $errno, $errstr, $time_out); 

     if (!$sock) { 
      print("Could not connect to host:". $errno . $errstr); 
      return (false); 
     } 

    $data = "xml=<?xml version=\"1.0\"?><Envelope><Body>"; 
    $data .= "<GetListMetaData><LIST_ID>" . $list_id . "</LIST_ID>"; 
    $data .= "</GetListMetaData></Body></Envelope>"; 
    $size = strlen ($data); 

    fputs ($sock, "POST /servlet/" . $servlet . " HTTP/1.1\n"); 
    fputs ($sock, "Host: " . $host . "\n"); 
    fputs ($sock, "Content-type: application/x-www-form-urlencoded\n"); 
    fputs ($sock, "Content-length: " . $size . "\n"); 
    fputs ($sock, "Connection: close\n\n"); 
    fputs ($sock, $data); 
    $buffer = ""; 

     while (!feof ($sock)) { 
     $buffer .= fgets ($sock); 
     } 

    fclose ($sock); 
    print ($buffer); 
    return ($buffer); 

    } 

    //XML Parsing Functions 

    function between ($this, $that, $inthat) { 
     return before($that, after($this, $inthat)); 
    }; 

    function before ($this, $inthat) { 
     return substr($inthat, 0, strpos($inthat, $this)); 
    }; 

    function after ($this, $inthat) { 
     if (!is_bool(strpos($inthat, $this))) 
     return substr($inthat, strpos($inthat,$this)+strlen($this)); 
    }; 

    // XML Parsing of GetMetaData(); function 
    $xml_response = GetMetaData(); 

    $id = between ("<ID>","</ID>", $xml_response); 
    $last_name = between ("<NAME>LAST_NAME</NAME>\n<VALUE>","</VALUE>", $xml_response); 

    print($id) 
    ?> 
+2

Peut-être faire une faveur et StackOverflow ... – shamittomar

+1

Peut-être que vous pourriez effectivement ** poser une question * * au lieu de poster juste beaucoup de code? – Frxstrem

+1

Désolé, j'ai copié la question lors du collage du code. Mise à jour – Taylor

Répondre

0

Regardez dans SoapClient. Je suppose que vous essayez de faire des appels à un service Web, et votre code pourrait être compressé à quelque chose comme ceci:

$client = new SoapClient('http://path/to/wsdl'); 
$session_id = $client->__call('Login', array($username, $password)); 

$metadata = $client->__call('GetListMetaData', array($session_id, '7238776')); 
$id = $metadata->id; 
$last_name = $metadata->last_name; 
+0

Tous les services Web ont-ils un support SOAP? – Taylor

+0

@Taylor, non, REST est une autre méthode populaire, mais votre exemple semble utiliser des messages SOAP. –

+0

Voici une réponse typique: enveloppe> TRUE TestData 09/01/10 11:56 18/05/10 16:34 Taylor

Questions connexes