Nyt pukkaa kotisivulla virheilmoituksia.
Ensimmäinen virhe tulee date() funktiosta. Tutkiskelin nettiä, josta löytyi, että vaatisi date_default_timezone_set funktion määrittelyn.
date_default_timezone_set("Europa/Helsinki");
Laitoin tuon rivin index.php jossa on yksi date() funktio, siellä <?php jälkeen ensimmäiseksi riviksi, mutta virheilmoitukset jatkuu.
Mihin tuo pitäisi laittaa ja minkälainen rivin pitäisi olla?
Toinen herja tulee header() funktiosta. Määrittelen index.php:ssa $muuttujan joka saatuaan määrätyn arvon niin pitäisi ohjautua seuraavaan ohjelmaan.
Virheilmoitus: Cannot modify header information.
Ennen nämä toimi, mutta eilen alkoi antamaan virheilmoituksia.
Nämä ohjelmat on aikanaan tehty PHP v.5.1 ja nyt palveluntarjoajalla on versio 5.5. Vaikuttaako tuo ettei enää toimi?
Varmista että sulla ei ole ennen <? merkkiä mitään, ei edes näkymätöntä BOM-merkkiä. (Eli tekstieditorista valitset että haluat tallentaa ilman BOMia)
Vaikea sanoa tuohon date -virheilmoitukseen, kun et kertonut mikä se virheilmoitus on.
Olen nykyään ohjelmoinnut hyvin vähän joten en ymmärrä mitä tarkoitat <? ennen ei saa olla mitään? Talletin ilman bom:ia, ei vaikutusta.
Date() antaa tällaisen virheilmoituksen:
Warning: date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone.
Varmasti header tuottaa virheen, jos tiedostossa tulee jo aiemmin virhetulosteita esimerkiksi tuosta date-asiasta. Korjaa kaikki muut virheet ensin ja tutki sitten header-asiaa, jos se on yhä läsnä.
Olet kirjoittanut aikavyöhykkeen väärin (Europa vs. Europe). Muuten kyllä virheen pitäisi tuolla korjautua, kunhan asetat aikavyöhykkeen koodissa ennen ensimmäistäkään date-kutsua. Voisit myös laittaa aikavyöhykkeen palvelimen asetuksiin; tämän toteutus riippuu palvelimesta.
Kiitos, date() lopetti virheilmoituksen antamisen, mutta header edelleenkin herjaa.
Ennen Headerin lähettämistä ei saa aloittaa sivun "tulostamista".
Katso mitä siinä tulostetussa HTML-sivussa lukee ennen sitä virheilmoitusta. Jos näyttää siltä ettei lue mitään, niin katso edeltävä viestini.
Miten tämä sitten aikaisemmin toimi, en ole muuttanut ohjelmaa ennen kuin alkoi antaa virheilmoituksia. En tiedä onko palveluntarjoaja tehnyt jotain päivityksiä.
Ehkä aikaisemmin on ollut puskurointi (output buffering) oletuksena käytössä. Yleensä ongelman ”ratkaiseminen” puskuroinnilla ei ole ohjelmointityylin kannalta kovinkaan siistiä.
Missä tuo määritellään? En löytänyt omasta editorista tuollaista vai onko se PHP:n asetuksissa?
(Miten ihmeessä et löytänyt?) Tietenkin se on PHP:n asetuksissa, vai miten ajattelit editorin asetusten vaikuttavan palvelimen toimintaan?
Mutta kuten sanoin, puskurointi ei ole optimaalinen ratkaisu ongelmaan, vaan katso selaimella sivun lähdekoodista, mitä sinne on tulostettu ennen virheilmoitusta, ja poista ne väärät tulosteet.
Nyt alkoi taas toimimaan, vaikka en ole päivittänyt ohjelmia. Tuntuu, että palveluntarjoaja tekee päivityksiä miten sattuu ja käyttäjät saavat osansa siitä. Niin kuin aikaisemmin kerroin, en ole pahemmin ohjelmoinnut vähään aikaan ja sen tähden muistista poistuu ajan mittaan kaikki mitä on aikanaan osannut. Kiitos neuvoista mitä olen saanut.
Monilta palveluntarjoajilta menee ihmeellisesti ohi näitä taaksepäin epäyhteensopivia asetusten muutoksia. Kun muutama sivusto hajoaa, asetukset ehkä palautetaan ennalleen. Siitä huolimatta kannattaisi päivittää koodi toimimaan oikein: voit laittaa header-rivin tilalle die-rivin ja selvittää lähdekoodista, mitä ennen sitä on tulostettu.
Palveluntarjoajalta tuli viesti, että vika oli heidän koodissaan. On hienoa, että on kanttia tunnustaa virheensä, yleensä se menee aina käyttäjän piikkiin.
Aihe on jo aika vanha, joten et voi enää vastata siihen.