Minulla on tiedosto, joka generoi json-taulukon
... header('Content-Type: application/json'); echo json_encode($result);
Yritän käyttää samaa tiedostoa niin että saisin tuon php-arrayksi. Eli näin:
$blaa = json_decode(file_get_contents(HTTP_PATH."/getJutut.php?params=foobar"),true); // vähän vaihdettu vain nimiä :P
Testasin että tiedosto kyllä palauttaa datan, mutta ei tuossa php:koodissani.
Eikö tämän pitisi toimia? Olen tässä jo koittanut kaikenlaista
(psst... hyvää yötä)
Funktio file_get_contents
palauttaa tiedoston sisällön sellaisenaan, suorittamatta sen sisältämää koodia.
Siis: Ensimmäisen tiedoston sisältö palautuu toisen tiedoston json_decode
-funktiolle sellaisenaan, mikä aiheuttaa virheen, sillä json_decode
-funktio ei saa tässä haluamaansa JSON-koodia, vaan parsimatonta PHP:tä.
HTML5: file_get_contents toimii tässä tapauksessa juuri oikein. Sen avulla tehdään HTTP-pyyntö, jonka tulos kuuluukin antaa json-decode-funktiole sellaisenaan.
p99o: Yrität hakea JSON-datan ilmeisesti toiselta palvelimelta. Mitä file_get_contents-funktio palauttaa? Palvelimella ei ei välttämättä esimerkiksi ole allow_url_fopen asetettu. Jos tiedosto on samalla palvelimella, laita toiminnallisuus funktioon ja käytä includea.
Tiedosto ei ole toisella palvelimella, vaan omana tiedostonaan localhostilla.
HTTP_PATH on ympäristön polku muodossa "http://localhost/juttu/blaa/projekti/", koska näinhän se pitää olla tässä tapauksessa.
print_r() palauttaa:
Array
(
)
No palauttaako php-tiedosto ihan validin json-datan?
Kyllä, kute jo sanoin. Lorem ipsumia tällä hetkellä tuutin täydeltä. Testasin tällä, ja kyllä vaatimukset täyttää.
Paha sitten sanoa, kun ei itse pääse debuggaamaan.
Silti, vaikuttaisi, ettei tuo sun urlisi silti ole oikea, tai ettei se palauta sitä json-dataa.
Debuggaa uudelleen.
Onko nyt ihan varma että ongelma ei ole tiedostossa joka generoi json:in?
... header('Content-Type: application/json'); echo json_encode($result);
Oletko siis varmistanut, että myös se paikallinen osoite http://localhost/plaa tuottaa kelvollista JSON-dataa? Useinhan palvelimilla (varsinkin webhotelleissa) on useita sivustoja, jolloin localhost ei ole toimiva domain vaan osoitteessa pitäisi lukea todellinen domain kuten www.ohjelmointiputka.net.
Väännetään nyt vielä varalta rautalangasta. Mitä tämä tulostaa:
var_dump(file_get_contents(HTTP_PATH."/getJutut.php?params=foobar"));
string(2) "[]"
Sehän kertoo, että skriptisi getJutut.php tulostaa täysin kelvollista JSON-dataa, tarkemmin tyhjän JSON-taulukon. Debuggauksen seuraava vaihe on selvittää, miksi tulostuskoodin $result-muuttujassa on tyhjä taulukko ($result == array()). Vika on siis ensimmäisen koodisi kohdassa ”...” eli tietojen hakemisessa.
Suosittelen muitakin kokeilemaan ns. forumistien mustaa listaa henkilöistä, joiden postauksiin ei pidä vastata. Kyllähän noin avuton debuggaaminen on jo loukkaus tätä palstaa kohtaan. Näistä vastauksistakin näkee, etteivät vastapostaajatkaan jaksa käyttää aivokapasiteettiaan (koska kysymysten laatu on heikko), joten tällaisiin ketjuihin vastaaminen ainoastaan antaa huonon kuvan ulkopuolisille.
En jaksa tapella tämän kanssa. Yritin kaikkea.
p99o kirjoitti:
En jaksa tapella tämän kanssa. Yritin kaikkea.
Postaisit sen koodin alkuosan, niin joku varmaan kertoisi mikä siinä on vialla.
Veikkaan, että tämä ongelma ratkeaisi joko katsomalla PHP:n varoituksia tai tarkistamalla, että osoite ja parametrit ovat oikeasti ihan samat kuin siinä muka toimivassa testauksessa.
Varoituksia ei tule, vaikka virheilmoitukset ovat päällä.
Jos syötän jotain dataa staattisesti niin kyllä se näkyy.
No mistä se lorem ipsum sitten tulee, ja miten se ei muka näy toiselle skriptille, vaikka näet sen jossain muualla itse?
Otapa nyt myös selvää, mistä tuo $result tulee ja miksi se on tyhjä.
Aihe on jo aika vanha, joten et voi enää vastata siihen.