2015-03-25 2 views
2

Je tente de capturer la réponse envoyée par la classe SoapServer de PHP pour le débogage avant qu'elle ne soit réellement envoyée au navigateur.SoapServer-> handle() ignorant la mise en mémoire tampon de sortie

J'utilise Zend_Soap_Server qui est censé permettre la capture de la sortie de SoapServer->handle() en utilisant la mise en mémoire tampon de sortie. Cependant, la méthode du handle semble ignorer complètement le buffer, envoyant directement au navigateur et détruisant la requête.

Cet extrait provient directement de la méthode Zend_Soap_Server->handle().

ob_start(); 
if ($setRequestException instanceof Exception) { 
    // Create SOAP fault message if we've caught a request exception 
    $fault = $this->fault($setRequestException->getMessage(), 'Sender'); 
} else { 
    try { 
     $soap->handle($this->_request); 
    } catch (Exception $e) { 
     $fault = $this->fault($e); 
    } 
} 
$this->_response = ob_get_clean(); 

Comme vous pouvez le voir ci-dessus, la sortie de $soap->handle() doit être capturé dans la mémoire tampon et affecté à $this->_response avec ob_get_clean(). PHP ne semble jamais arriver à ce point si $soap->handle() met fin à la demande.

Si je répercute une chaîne dans la mémoire tampon, elle n'est pas envoyée au navigateur et est tamponnée correctement, ce qui me fait penser que $soap->handle() fait quelque chose qui la casse.

Toute aide ici serait grandement appréciée.

Répondre

2

Il s'avère que PHP lançait une méthode fatale dans la poignée à cause d'un problème d'espace de nom de requête (impossible de trouver une méthode de procédure). Lorsqu'un événement fatal se produit dans le processus de compilation de la réponse SOAP, il est formaté comme une réponse SOAP et envoyé au navigateur avant l'arrêt du processus, ce qui signifie que toute sortie échappera au tampon. J'espère que cela aidera tous ceux qui trébucheront à travers cela à l'avenir.