Avatar billede miss-g Seniormester
12. marts 2018 - 23:07 Der er 14 kommentarer og
1 løsning

Warning: Cannot modify header information

Så har jeg brug for hjælp igen.

Min hjemmeside kommer med fejl:

Warning: Cannot modify header information - headers already sent by (output started at /var/www/syord.dk/public_html/adm/index.php:2) in /var/www/syord.dk/webassist/mysqli/authentication.php on line 206

I filen authentication.php linje 206 står:
header("location: " . $this->addQuerystring($url));

Og her hele kodedelen:
    public function redirect($url) {
      if ($url) {
        header("location: " . $this->addQuerystring($url));
        die();
      }
    }
------------------------------
What to do??
Avatar billede arne_v Ekspert
12. marts 2018 - 23:20 #1
Fejlen betyder at du forsoeger at redirecte til en anden side efter at du er startet paa at outputte nuvaerende side. Det kan man ikke.
Avatar billede miss-g Seniormester
12. marts 2018 - 23:30 #2
Ok, jeg tester om min user authorization virker. Det er korrekt at jeg bare indtaster en adresse og springer log ind siden over. Den burde vel hoppe hen til log ind siden, som jeg har bedt den om?
Avatar billede miss-g Seniormester
12. marts 2018 - 23:34 #3
Denne bliver indlæst først:
<?php require_once('../../webassist/mysqli/authentication.php'); ?>

Og dette bagefter:

<?php
if ("" == "") {
  $RestrictAccess = new WA_MySQLi_Auth();
  $RestrictAccess->Action = "restrict";
  $RestrictAccess->Name = "admin";
  $RestricAccessRedirect = "logind.php";
  if (function_exists("rel2abs")) $RestricAccessRedirect = $RestricAccessRedirect?rel2abs($RestricAccessRedirect,dirname(__FILE__)):"";
  $RestrictAccess->FailRedirect = $RestricAccessRedirect;
  $RestrictAccess->execute();
}
?>
Avatar billede miss-g Seniormester
12. marts 2018 - 23:45 #4
Jeg kan lige tilføje, at det virker efter hensigten på testserveren (Wamp/PHP 7), men altså ikke på webhotellet, som også kører PHP 7. ??
Avatar billede acore Ekspert
13. marts 2018 - 09:00 #5
Det kan skyldes, at der ved en fejl har sneget sig en blanbk linie ind i din kode inden

<php?

Derved outputtes en blank linie og du kan ikke redirecte.
Avatar billede miss-g Seniormester
13. marts 2018 - 13:47 #6
Tak acore. Der er ingen blank linje.

Kan det være noget med uft-8 / phpMysql eller ?  Det er jo underligt, at det virker på localhost, men ikke på webhotellet?
Avatar billede acore Ekspert
13. marts 2018 - 13:55 #7
Er filerne gemt i ANSI? Er de i UTF-8 kan den såkaldte BOM give problemer.
Avatar billede arne_v Ekspert
13. marts 2018 - 15:26 #8
For at koden er korrekt saa maa der ikke outputtes saa meget som en enkelt byte inden header.

I praksis kan der godt caches noget output, hvilket kan tillade en lille smule output inden header.

Den cache maengde kan godt vare forskellig mellem din hjemme Windows PHP og dit web hotel Linux PHP.

Jeg mener at det er php.ini output_buffering som styrer det.
Avatar billede miss-g Seniormester
13. marts 2018 - 16:18 #9
Jeg kan nok ikke rette noget cache på webhotellet....

Jeg tænker, at jeg kan leve med "fejlen" - den er åbenbart ikke lige til at løse. Det vigtige er, at folk udefra ikke kan tilgå siden - om den spærrer på en ene eller anden måde, går nok.
Avatar billede acore Ekspert
13. marts 2018 - 17:49 #10
Den fejl kan findes! Om du så orker det, er en anden snak.

Du skal lede efter blanke linier, mellemrum, eller lignende, som står før <php?

Hvad står der i adm/index.php? Det synes at være i den problemnet starter.
Avatar billede miss-g Seniormester
13. marts 2018 - 18:35 #11
Min index.php ser sådan ud i toppen

<?php require_once('../../Connections/conn.php'); ?>
<!---------------------------------------------------------------------------------------------->
<?php require_once('../../webassist/mysqli/authentication.php'); //adgangskontrol 1 ?>
<?php include ("../../private_html/adgang.php") //adgangskontrol 2 ;?>
<!---------------------------------------------------------------------------------------------->
<?php include ("includes/inc_header.php");?>
<!---------------------------------------------------------------------------------------------->
<?php require_once('../../webassist/mysqli/rsobj.php'); ?>
<?php
$rs_ord = new WA_MySQLi_RS("rs_ord",$conn,0);
$rs_ord->setQuery("SELECT * FROM ordliste");
$rs_ord->execute();
?>
Avatar billede miss-g Seniormester
13. marts 2018 - 19:40 #12
Gad vide om jeg ikke skal starte forfra. Filen authentication.php, som tilsyneladende indeholder fejl, bliver autogenereret af en extension i Dreamweaver. Hvis jeg sletter den og prøver forfra....
Avatar billede miss-g Seniormester
13. marts 2018 - 20:00 #13
LØST
Så er det opklaret:

Hvis jeg sætter en kommentarlinje <!------------------------------------> før
<?php require_once('../../webassist/mysqli/authentication.php'); // adgang 1?>
så kommer fejlen. Den er nu fjernet, og det virker efter hensigten.

Tak for input allesammen :-)
Avatar billede acore Ekspert
13. marts 2018 - 20:01 #14
Fejlen opstår i authentication.php, men kun fordi der er "output" inden.

Og det virker jo lokalt.

Så næppe en løsning.

Du kunne overveje, at rette index filen fra #11, så der kun er én <php? og én ?>.

Men de er absolut et vildskud - foreslået på baggrund af, at der i fejlen skrives, at der er output i linie 2 - som er

<!---------------------------------------------------------------------------------------------->

og som burde være harmløs
Avatar billede acore Ekspert
13. marts 2018 - 20:03 #15
Tror tanken er, at du skal markere "LØST" til den eller de poster, der har hjulpet dig med at løse dit problem. Så hvis du mener, at du selv har løst problemet, har du gjort det rigtigt.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester