Mistä johtuu että
header("location:./sivu.php");
ei toimi PHP 4 versiossa.
Miten tuo "ei toimi"?
Muistaakseen dokkareissa kehoitetaan käyttämään absoluuttista polkua.
Todistettavasti se toimii PHP 4:ssa.
Ja miksi ihmeessä "location:./sivu.php" eikä "location:sivu.php"
testi.php
<?php header("location:./sivu.php"); ?>
sivu.php
<html><body><p>Tämä on sivu.php</p> PHP versio: <?php echo phpversion(); ?> </body></html>
Veikkaan että Vasta_alkajalla on jokin muu säätö, minkä vuoksi tuota headeria ei koskaan ajeta, tai eteen on tullut surullisen kuuluisa headers_already_sent!
edit:
<offtopic>
eli ei välttämättä juuri tähän ongelmaan liity, mutta...
Mitenköhän on, ettei nykyään muuten debugata? Tuntuu, että ensimmäisenä juostaan foorumeille, ja valitetaan valmiiden funktioiden toimimattomuutta, ennen kuin on oma koodi tarkistettu.
</offtopic>
Tuohon offtopiciin. Varmaan >99,9% ohjelmoijista debuggaa omatoimisesti, mutta jos joka tuhanneskin ryntää ensimmäisenä foorumeille kysymään, niin kysyjiä on monta.
Jep. Olette aivan oikeassa turhasta kyselystä.
Cannot modify header information - headers already sent by (output started
siinä se vika on, eli pitää käyttää ob_start functiota.
PS. Sori vaivasta.
ei tämä turha kysymys ollut, mutta seuraavalla kerralla voisi kertoa hieman tarkemmin kuin "ei toimi".
Eli virheilmoitus auttaisi auttajia huomattavasti.
"Ja miksi ihmeessä "location:./sivu.php" eikä "location:sivu.php"".
Koska itsellä ei ainakaan joskus toiminut ilman tuota ./. Riippuu varmaan alustasta ja PHP-versiosta.
"Veikkaan että Vasta_alkajalla on jokin muu säätö, minkä vuoksi tuota headeria ei koskaan ajeta, tai eteen on tullut surullisen kuuluisa headers_already_sent!"
PHP5 ei ainakaan itsellä anna tuosta headers already sent -erroria, vaikka olen muutamaan otteeseen tuollaista ratkaisua käyttänyt. PHP4 herjaa ja varmaan vanhemmatkin.
punppis kirjoitti:
Koska itsellä ei ainakaan joskus toiminut ilman tuota ./. Riippuu varmaan alustasta ja PHP-versiosta.
Ei varmaan riipu vähäisintäkään tippaa alustasta tai PHP-versiosta, koska PHP tunkee tuon headerin ihan vaan sellaisenaan selaimen suuntaan ja selain pohtii sitten mitä tekee.
Ihan nyt vaan että ei tulisi ihmisille väärää käsitystä asioita.
Eli jos ./sivu.htm toimisi, mutta sivu.htm ei niin kyseessä olisi omituinen selain. Suositus olisi käyttää täydellistä polkua, mutta nuo ovat molemmat suhteellisia, eikä tuo ./ ainakaan ole parempi (kun kuitenkaan ei ole Unixin komentorivistä kyse :D )
Kokeilin FF/IE/Opera ja kaikilla toimi kumpi vaan. HTTP-speksin mukaan toki pitäisi olla http://koko.osoite.com/sivu.php
punppis kirjoitti:
PHP5 ei ainakaan itsellä anna tuosta headers already sent -erroria, vaikka olen muutamaan otteeseen tuollaista ratkaisua käyttänyt. PHP4 herjaa ja varmaan vanhemmatkin.
Se johtuu vain yksinkertaisesti siitä kun headerit on jo lähetetty, johan se selviää tuosta virheilmoituksesta. Eli ei ole mitenkään kyse PHP:n versiosta. Sama virheilmoitus on mahdollista saada ja tuleekin PHP viitosellakin. Blazen kuuluisa sivu liian usein kysytyistä kysymyksistä: http://pp.kpnet.fi/blaze/codefaq/#headerssent
Ja jos tarkoitat sitä ettei PHP herjaa siitä virheestä vaikka väärin ollaan tehty niin silloin on menty vähän muuttelemaan PHP:n asetuksia virheiden reportoinnista.
punppis kirjoitti:
PHP5 ei ainakaan itsellä anna tuosta headers already sent -erroria, vaikka olen muutamaan otteeseen tuollaista ratkaisua käyttänyt. PHP4 herjaa ja varmaan vanhemmatkin.
Vitos-PHP:s on siis konffattu bufferoimaan tulostus oletuksena. Version kanssa tuolla ei oo mitään tekemistä, php.inin asetusten kanssa sitäkin enemmän.
Kiitoksia sivistyksestä.
Aihe on jo aika vanha, joten et voi enää vastata siihen.