ugrás a tartalomhoz

Linux+Apache+PHP: XML válasz elromlik - miért?

tisch.david · 2011. Május. 13. (P), 16.09
Sziasztok!

Van egy PHP scriptem, ami egy webszolgáltatást hív meg fopen()-nel, és a válasz XML-t adja vissza. Ha ezt a kódot a gépemen futtatom, WAMP alatt, akkor megy remkül, ha viszont felteszem az egyik linuxos szerverünkre, akkor a válasz XML-ben a node-ok (a windows-os camel case helyett) csupa kisbetűsek lesznek, és bizonyos XML node attribútumok (pl. nil=1) invalid módon kerülnek a dokumentumba (pl. így, " nélkül).

Mi okozhatja ezt?

Előre is köszönöm a válaszokat!
Üdv:

Dávid
 
1

Hol?

Poetro · 2011. Május. 13. (P), 16.17
Hol lesz más az XML? Mást tölt le? Más lesz a fájl tartalma? Vagy az XML értelmező kód értelemezi másképp az XML-t. Tudsz mutatni egy minimális példát, amivel reprodukálható a probléma?
2

Pontosítás

tisch.david · 2011. Május. 13. (P), 17.48
Szia Poetro!

Köszönöm, hogy foglalkozol a problémával! A sematikus kód:
  1. ...  
  2. $params = array('http' => array(  
  3.         'method' => 'POST',  
  4.         'header' => "SOAPAction: $action\r\nContent-Type: text/xml; charset=UTF-8"  
  5.         'content' => $content  
  6. ));  
  7. $ctx = stream_context_create($params);  
  8. $fp = @fopen('https://ejelentes.oep.hu/ejelentes/EJELSoapHttpPort''rb', false, $ctx);  
  9. if (!$fp) {  
  10.     echo 'Kapcsolódási hiba!';  
  11. }  
  12. $response = @stream_get_contents($fp);  
  13. if ($response === false) {  
  14.     echo 'Adatolvasási hiba!';  
  15. }  
  16. echo iconv('UTF-8''ISO-8859-2//IGNORE'$response);  
Az így visszakapott kódot kliens oldalon egy programmal XML fájlba mentem. Ha a PHP kód Windows 7 és WAMP alatt fut, akkor az eredmény XML fájl egy részlete így néz ki:
  1. ...  
  2.     <ns0:hibas>0</ns0:hibas>  
  3.     <ns0:megjegyzes xsi:nil="1"/>  
  4.    </ns0:result>  
  5.   </ns0:getUserKasszaResponseElement>  
  6.  </env:Body>  
  7. </env:Envelope>  
Ha ugyanazon a gépen soapUI-val hívom ezt a webszolgáltatást, akkor is így néz ki. Ha a linuxos szerveren fut a kód akkor meg ez az eredmény:
  1. ...  
  2.     <ns0:hibas>0</ns0:hibas>  
  3.     <ns0:megjegyzes xsi:nil=1/>  
  4.    </ns0:result>  
  5.   </ns0:getuserkasszaresponseelement>  
  6.  </env:body>  
  7. </env:envelope>  
Ezen a linken tudod Te is meghívni a szolgáltatást és láthatod az eredményt.

Plusz kellemetlenség egyébként, hogy a saját virtuális linuxos szerverünkön nem is tudom futtatni a kódot, mert állandóan "failed to open stream" hibát és 400-as HTTP státusz kódot ad vissza az fopen(), hiába állítgatok User-Agent-et, meg bármit.

Köszönöm a választ!
Üdv:

Dávid
3

Hozzáférés

Poetro · 2011. Május. 13. (P), 18.03
Szerintem a kiszolgáló rétegben lehet a probléma. Azaz a SOAP szerver nem ugyanolyan választ ad. Egyébként miért van szükség iconv-al átalakítani az XML-t? Az UTF-8 sokkal könnyebben feldolgozható, és egyébként is az az alapértelmezett karakterkódolása.

Egyébként az is lehet, hogy a SOAP szerver valamiféle korlátozással él, és azért ad 400-as hibát. (mondjuk nem ártana tudni, mit is ad pontosan válasznak).
4

A kód neve: töketlenség

tisch.david · 2011. Május. 13. (P), 20.53
Szia Poetro!

Köszi a választ! Azért kell iconv-val átalakítani az XML-t, mert a kliens oldalon Magic (uniPaaS) van, ami nem kezeli az UTF-8-at. :)

Az fopen() warningja csak azt tartalmazza, hogy nem sikerült a kapcsolódás és, hogy ennek "oka" egy 400-as HTTP státusz kód. Az alapvető gond, hogy sem a szerverünket üzemeltető cég nem "tud" segíteni, sem az OEP-es üzemeltetés, a fejlesztő AlbaComp pedig számunkra elérhetetlen. :( No comment. Marad a workaround.

Üdv:

Dávid
5

iconv -> mb_convert_encoding

razielanarki · 2011. Május. 14. (Szo), 15.03
nekem gyanús az iconv hívás vmiért, volt már abból gondom, h linuxon és windowson nem ugyanúgy futott a konverzió, főleg ha //IGNORE -t és/vagy //TRANSLIT -et is tartalmazott a hívás.
6

Sajnos anélkül se...

tisch.david · 2011. Május. 15. (V), 21.03
Én is próbáltam iconv nélkül, de sajnos úgy is ugyanaz maradt az eredmény.