Hei, osaisiko joku kertoa miksi alla oleva koodin pätkä on pelannut monta vuotta ongelmitta, mutta nyt ei enää pelaa. Näyttää vain noin 300 ensimmäistä riviä.
Jos taas menen selaimella tuolle sivulle ja copy&pastean lähdekoodin tiedostoon ja pistän file_get_contens:lle parametriksi tiedoston, niin kaikki toimii ok.
Perässä mulla on tässä siis parseri, millä haetaan ylin ja alin lämpötila, jne...
$url = "http://www.foreca.fi/Finland/Helsinki/tenday/"; $str = file_get_contents($url); echo $str;
Pätkäiseekö tuo sisällön varmasti noin 300 rivin jälkeen, vai onko sivulla jotain, ettei skriptisi vain osaa näyttää sitä?
Onko mahdollista, että sivuille on myös laitettu esto, ettei tietyillä user-agenteilla näytetä koko sivua?
Ongelma on siinä, että PHP käyttää oletuksena HTTP/1.0-protokollaa mutta tuo palvelin ei enää tue sitä vaan palauttaa jotenkin vajaan sivun.
Ongelman voi todeta myös esimerkiksi curl-ohjelmalla:
curl -0Lso- http://www.foreca.fi/ | wc -c # HTTP/1.0, 16142 tavua curl -1Lso- http://www.foreca.fi/ | wc -c # HTTP/1.1, 72593 tavua
Ongelma ratkeaa, kun PHP:n laittaa käyttämään HTTP/1.1-protokollaa. Asetuksen voi laittaa kaikkialle käyttöön näin:
stream_context_get_default(["http" => ["protocol_version" => 1.1]]);
Hei. Nythän se sitten alkoi heti toimimaan.
Tilanne hämäsi minua, koska sivu ei päällepäin ole muuttunut yhtään, mutta yhtäkkiä ei enää toiminut. Ainoa mikä siis tuli mieleen, että sivun tarjoajan on täytynyt muuttaa jotakin.
Itse testasin myös saman curlilla ja fopenilla. Kaikilla sama tulos.
En olisi kyllä tämän jäljille päässyt, jos en olisi tähän ratkaisua täältä saanut. Iso kiitos!
Aihe on jo aika vanha, joten et voi enää vastata siihen.