[XML] Distinguer 2 type de contenu : XML / PDF dans un retour CURL
Bonjour à tous...
Je poste un petit message car je suis confronté à une difficulté sur la lecture d'un flux de données que je recois d'un webservice.
Mon probleme est le suivant :
Je récupere via CURL une réponse d'un webservice que l'on interoge, et qui me retourne en réponse selon le cas, soit :
1- simplement un XML :
le return["cr"] contient directement des données au format <?xml version='1.0' encoding='utf-8'?>
que je parviens à parser et stocker en bdd directement (mieux encore je stocke un log fichier, et les données utilisateurs en bdd)
2- Une combinaison XML + PDF :
Le return["cr"] contient alors des données au format suivant :
------=_Part_4_12345678.1234567891234
Content-Type: text/xml; charset=UTF-8
Content-Transfer-Encoding: binary
Content-Id: <132465789132456789>
<?xml version='1.0' encoding='utf-8'?>
..... Mon contenu XML ....
------=_Part_4_12345678.1234567891234
Content-Type: application/octet-stream
Content-Transfer-Encoding: binary
Content-Id: <fichier>
%PDF-1.4
......Mon contenu PDF .....
%%EOF
------=_Part_4_12345678.1234567891234--
Ma question est donc la suivante :
Comment je fais pour :
Extraire la chaine XML que je place dans une chaine $postdata
extraire la chaine PDF que je place dans une chaine $fichier_pdf...
Merci pour votre aide ...
Tdldp
Résolu, et pour ceux que ca interesse...
J'ai finalement utilisé une fonction... :
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
|
function xmlpdf($contenu)
{
// Récupération du nom du fichier PDF
$nomficpdf = '';
$pos = strpos($contenu, '.pdf');
if (!($pos === false))
{
$val1 = substr($contenu, 0, $pos+4);
$pos = strrpos($val1, '>');
if (!($pos === false))
{
$nomficpdf = substr($val1, $pos+1, strlen($val1)-($pos+1));
}
}
//******** XML *********//
// Définition des bornes pour l'extraction du XML
$detect_deb_xml = '<?xml';
$detect_fin_xml = '</soapenv:Envelope>';
// Détection des bornes pour l'extraction du XML
$debxml = strpos($contenu, $detect_deb_xml);
$finxml = strpos($contenu, $detect_fin_xml);
// Extraction du XML
$xml = substr($contenu, $debxml, $finxml - ($debxml - strlen($detect_fin_xml)));
//******** XML *********//
//******** PDF *********//
// Définition des bornes pour l'extraction du PDF
$detect_deb_pdf = '%PDF';
$detect_fin_pdf = '%%EOF';
// Détection des bornes pour l'extraction du PDF
$debpdf = strpos($contenu, $detect_deb_pdf);
$finpdf = strpos($contenu, $detect_fin_pdf);
// Extraction du PDF
$pdf = substr($contenu, $debpdf, $finpdf - ($debpdf - strlen($detect_fin_pdf)));
//******** PDF *********//
if ($debxml >= 0 && $debxml < 10) // Si le contenu est un simple XML
{
// Récupération du XML
return $contenu;
}
else // Si le contenu contient un fichier PDF
{
if ($nomficpdf != '') // Si le nom du fichier PDF a bien été trouvé
{
// Génération du fichier PDF
$fic = fopen('/home/pdf/'.$nomficpdf, "w");
fputs($fic, $pdf);
fclose($fic);
}
// Récupération du XML
return $xml;
}
} |