Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: PHP: Cannot modify header already sent by

Sivun loppuun

alker [08.07.2010 18:53:25]

#

Virhe:
Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\CMS\index.php:1) in C:\xampp\htdocs\CMS\function.php on line 7
Eli olen pähkäillyt paljon tätä ja tässä on php sivun koodi:

<?php
      function safe_header($str) {
      if (!headers_sent()) {
      ob_clean();
      return       header($str);
      }
      return       header($str);
      }
if(file_exists($dir)) {
header("Location:index.php?error=0");
}
/*************************************
Functions Page
(C) Copyright Paladin CMS
Made By Aleksi "Alker" Tanskanen
**************************************/
function check_login() {
if(isset($_SESSION['name']))  {
safe_header("Location:me.php");
}
}
function check_offline() {
if(!isset($_SESSION['name']))  {
safe_header("Location:index.php");
}
}
function check_online() {
include("config.php");
    if($fp = @fsockopen($ip, $port, $ERROR_NO, $ERROR_STR, 5)) {
        print "<img src=imgs/online.gif>";
        fclose($fp);
    }else{
        print "<img src=imgs/offline.gif";
    }
}
function check_login_errors() {
$errors = array("<font color=red>Username not exists</font><br/>","<font color=red>Wrong Password</font><br/>");
if(isset($_GET['error'])) {
if(is_numeric($_GET['error'])) {
echo $errors[$_GET['error']];
echo "&nbsp;";
}
}
}
ob_flush();
?>

Macro [08.07.2010 19:30:38]

#

Tulostat dataa ennen header-funktioita. Sivulla on siis jo tekstiä, kun koitat lähettää header-tietoja. Siirrä esimerkiksi header-funktiot koodissa ylös, hätätapauksessa ob_start-funktio sivun alkuun.

alker [08.07.2010 19:33:40]

#

Macro itse asiassa nuo ovat includettu alkuun, mutta käytetään muualla.

Macro [08.07.2010 19:38:17]

#

Myös tyhjät rivit ja välilyönnit ovat tekstiä, joista tulee virhe. Lisäksi BOM on mahdollinen.

alker [08.07.2010 20:15:01]

#

Mitä tarkoitat BOMilla?

Grez [08.07.2010 20:25:08]

#

http://en.wikipedia.org/wiki/Byte_order_mark

Monet editorit lisäävät tiedostojen alkuun pyytämättä ja ilmoittamatta.

alker [08.07.2010 20:36:32]

#

Tietääkseni Notepad ei tuota tee. Tuosta välilyönneistä. Missä ne pitäisi olla, että virhe tulisi?

Grez [08.07.2010 20:39:59]

#

Ainakin Vistan Notepad tekee, jos talletat UTF8-muodossa. ANSI-muodossa tallennettuna ei tee.

Ja välilyönnit ja rivinvaihdot tietenkni haittaavat missä tahansa koodiblokkien ulkopuolella ennen headersien lähettämistä.

alker [08.07.2010 20:56:53]

#

Tätä ihmettelen. Mitä tämä tässä virheessä tarkottaa:output started at C:\xampp\htdocs\CMS\index.php:1

Metabolix [08.07.2010 21:08:59]

#

Se tarkoittaa, että olet tulostanut ensimmäisen kerran tiedoston C:\xampp\htdocs\CMS\index.php rivillä 1. Tiedostossa on siis alussa tyhjä rivi tai BOM, josta aiemmin oli puhe.

alker [08.07.2010 21:18:22]

#

tyhjää riviä siinä ei ole. Mikä editori pystyy lukemaan Bomin? Jolloin voisin sen poistaa.

pake10 [08.07.2010 21:28:31]

#

alker kirjoitti:

tyhjää riviä siinä ei ole. Mikä editori pystyy lukemaan Bomin? Jolloin voisin sen poistaa.

Lataa Notepad++, avaa tiedosto sillä, valitse Tiedostomuoto -> UTF-8 (ei BOM) ja tallenna tiedosto.

alker [08.07.2010 22:31:37]

#

Kiitosta kaikille vastanneille!


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta