PHP - Problemer med SimpleXML

PHP - Problemer med SimpleXML

Innleggav tjodolv » fre 11.09.2009 0:07

Heisann. Jeg har laget en modul til Drupal som laster inn en xml-fil, trikser litt med den, og lager html av det som skrives til skjermen. Lokalt fungerer det flott, ingen problemer. Når jeg nå var "ferdig", skulle jeg laste det opp til et webhotell og teste det der. Og da gikk det i dass. Jeg har sjekket at jeg faktisk har samme filen begge steder, slik at det ikke er noen gammel versjon som ligger og slenger.

Problemet
XML-filen hentes fra yr.no. Den hentes av cURL (som fungerer fint) og leses inn via $data = simplexml_load_file($temp_file), og det er tilsynelatende her noe går galt. Jeg får feilmeldingene:
  • warning: simplexml_load_file() [function.simplexml-load-file]: sites/freka.net/files/yr_verdata/temp.xml:222: parser error : Premature end of data in tag weatherdata line 2 in /home/users/freka/drupal/sites/all/modules/yr_verdata/yr_verdata.module on line 588.
  • warning: simplexml_load_file() [function.simplexml-load-file]: in /home/users/freka/drupal/sites/all/modules/yr_verdata/yr_verdata.module on line 588.
  • warning: simplexml_load_file() [function.simplexml-load-file]: ^ in /home/users/freka/drupal/sites/all/modules/yr_verdata/yr_verdata.module on line 588.
  • warning: simplexml_load_file() [function.simplexml-load-file]: I/O warning : failed to load external entity "" in /home/users/freka/drupal/sites/all/modules/yr_verdata/yr_verdata.module on line 191.

Jeg søkte litt rundt, og fant ut at det er noen som har opplevd problemer med $_SESSION ifm. simplexml, og følgende løsning ble foreslått:
Kode: Merk alt
$oldsession=serialize($_SESSION);
$data = simplexml_load_file($temp_file);
$_SESSION=unserialize($oldsession);
unset ($oldsession);

Dette fører til at tidligere nevnte feilmeldinger ikke dukker opp, men det er fremdeles ikke noe som dukker opp i $data = simplexml_load_file($temp_file). Dette fungerer som sagt lokalt.

Miljø
Lokalt:
- Mac OS X 10.5.8 med MAMP 1.7.2
- PHP 5.2.6
- libXML Version 2.6.32
- SimpleXML Revision: $Revision: 1.151.2.22.2.39 $
- Drupal 6.13

Eksternt:
- FreeBSD 6.3
- PHP 5.2.10
- libXML Version 2.6.32
- SimpleXML Revision: $Revision: 1.151.2.22.2.46 $
- Drupal 6.13

Er det noen som kan hjelpe..? Jeg famler i blinde her...

Brukerens avatar
medlem i 208 måneder
 

Re: PHP - Problemer med SimpleXML

Innleggav ak » fre 11.09.2009 2:19

Sjekk med phpinfo hvor mye minne som er tilgjengelig på webhotellet, deretter prøv å sette samme begrensning lokalt?

Administrator
Brukerens avatar
medlem i 236 måneder
 

Re: PHP - Problemer med SimpleXML

Innleggav tjodolv » fre 11.09.2009 12:58

Til å begynne med hadde jeg 64M på webhotellet, og 256M lokalt. Jeg fant ut av at jeg kunne endre det på webhotellet også, så jeg økte til 128M på webhotellet, og reduserte først til 64M og så 32M lokalt. Lokalt fungerer det fremdeles med 32M, mens på webhotellet får jeg fortsatt samme feilmelding.

Av installerte moduler er det en haug med forskjellige lokalt. På webhotellet er det kun Drupal Core (standard install) og Admin Menu utenom min egen. Jeg blir ikke klok...

Brukerens avatar
medlem i 208 måneder
 

Re: PHP - Problemer med SimpleXML

Innleggav ak » fre 11.09.2009 13:03

Prøv file_get_contents , og sjekk om den er i orden istedet for simplexml_load_file.

Da får du ihvertfall litt mer feedback om det er innlesingen eller parsingen som tryner.

Administrator
Brukerens avatar
medlem i 236 måneder
 

Re: PHP - Problemer med SimpleXML

Innleggav tjodolv » fre 11.09.2009 13:43

Aha! Nå kan det se ut som om vi er nærmere en løsning.
Kode: Merk alt
$string = file_get_contents($temp_file);
print $string;

Gir en streng som plutselig stopper, på linje 232.
Jeg får nå i tillegg en advarsel om dette fra simplexml (som jeg ikke fikk tidligere..?).

Fila er forsåvidt i orden når jeg ser på den, både via FTP og ssh. Jeg har sjekket den mot w3c sin validator, og den er "Well-formed". Det er den som kommer fra Yr.no. Og det fungerer som sagt lokalt.

Selv om det kanskje ga litt mer kjøtt på beinet, famler jeg fremdeles litt i blinde... Begge funksjonene skal lese til end of file som default.

Linje 232 ser slik ut:
Kode: Merk alt
<windDirection deg="209.3" code="SSW" name="Sør-sørvest" />

simplexml_load_file() og file_get_contents() stopper på:
Kode: Merk alt
<windDirectio

Denne noden er lik alle andre windDirection noder i dokumentet, så jeg skjønner ingenting.

Brukerens avatar
medlem i 208 måneder
 

Re: PHP - Problemer med SimpleXML

Innleggav ArneArts » fre 11.09.2009 14:03

Kan det være satt en begrensning på lasting av filer via file_get_contents() etc. over http? Enkelte webhoteller skrur av støtten for file_get_contents() over http fullstendig.

Får du samme feil hvis du henter inn filen med curl?
Kode: Merk alt
$url = 'http://your.mom.com/something.xml';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$xml = curl_exec($ch);

Brukerens avatar
medlem i 239 måneder
 

Re: PHP - Problemer med SimpleXML

Innleggav tjodolv » fre 11.09.2009 14:15

Ja, for å klarne opp litt:
1. Jeg henter filen fra yr.no med curl. Denne lagres som "temp.xml"
2. temp.xml leses inn av simplexml_load_file() for å sjekke at den er korrekt xml-fil med et faktisk værvarsel og ikke en feilmelding.
3a. Dersom innholdet er et fungerende værvarsel kopieres den til "stedsnavn.xml".
3b. Dersom innholdet ikke er et fungerende værvarsel kopieres den ikke, og en feilmelding vises.

Problemet her er i punkt 2. Når simplexml_load_file() eller file_get_contents() leser inn temp.xml så stopper den plutselig, på den linjen som er nevnt i innlegget over. Når jeg kobler til med FTP for å sjekke temp.xml, er den filen fullstendig og i orden, så selve overføringen av data fra yr.no går bra. Det er lesingen av filen som krasjer, og jeg aner ikke hvorfor.

Et Google-søk på feilmeldingene gir lite spesifikk informasjon (pluss treff på en haug med sider som viser slike feilmeldinger...)

Brukerens avatar
medlem i 208 måneder
 

Re: PHP - Problemer med SimpleXML

Innleggav ArneArts » fre 11.09.2009 14:21

Ah, skjønner. Får du samme problem om du prøver å lese filen med fopen() og fread()?

Brukerens avatar
medlem i 239 måneder
 

Re: PHP - Problemer med SimpleXML

Innleggav tjodolv » fre 11.09.2009 15:11

edit: Glem det, FUBAR....

Klarte plutselig å laste inn en xml-fil. Men så la jeg til flere steder å hente værvarsel for, og så gikk det rett i dass igjen. Samme feil, på samme linje. Samme symptomer.

http://freka.net/yr_verdata

Som dere ser så klarte den å laste inn Oslo, men de andre stedene jeg la til får samme feilmelding. Helt merkelig...

edit2:
Nå, noen timer senere, er problemet det samme, men nå har feilen flyttet seg, fra linje 232 til linje 236 i XML-dokumentet. Den stopper ikke på
Kode: Merk alt
windDirectio
lenger, men litt bortenfor, på
Kode: Merk alt
<windDirection deg="140.2" code="SE" name="So


Hvis noen vil prøve å reprodusere, så ligger kildekoden der: http://freka.net/node/1

edit3:
Kom på at jeg hadde tilgang til et annet webhotell, hvor jeg installerte modulen. Der fungerer det prikkfritt, så det har nok noe med hostingen min å gjøre. Jeg får ta kontakt med dem.
- Tar fremdeles gjerne i mot eventuelle tilbakemeldinger!

Brukerens avatar
medlem i 208 måneder
 


Returner til PHP



Hvem er i Forumene

Registrerte brukere: Google [Bot]



cron