CodeForum.chCode ForenPHPThema: Cannot send session cookie
Seiten: [1]
AntwortenDrucken
Autor Thema: Cannot send session cookie  (Gelesen 1561 mal)
maatien
Neu hier
*
Offline Offline

Beiträge: 2


« am: 21. Oktober 2008, 21:03:01 »
ZitierenZitat

Hi,

ich bekomme seit neuestem folgenden Fehler:
Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at index.php:1) in index.php on line 2

Die ersten Zeilen der index.php sind:
Code:
<?php
session_start
();
header('Content-type: text/html; charset=utf-8');
error_reporting(E_ALL);

Ich vermute, dass es hier ein Problem mit der Codierung der Datei gibt. Die Datei soll UTF-8 ausgeben und wurde auch so gespeichert. Ich hab die Datei aber mal mit einem anderen Editor geöffnet gehabt - seitdem erscheint diese Ausgabe.
Im Eclipse ist die Datei allerdings noch auf UTF-8 gestellt.

Hat vielleicht jemand eine Idee, wo der Fehler zu suchen ist?
Moderator informieren   Gespeichert
Gobo
nicht zu stoppen
*
Offline Offline

Beiträge: 1217



« Antworten #1 am: 21. Oktober 2008, 22:55:14 »
ZitierenZitat

Ja, aber die Kodierung ist dabei nebensächlich.

Um Session, Header oder Cookie (schreibend) zu nutzen, darf noch kein Output erfolgt sein, einfach gar keiner. Selbst ein Leerzeichen macht einem also einen Strich durch die Rechnung. Daher gehören solche Angaben ja auch in den absoluten Beginn des Skriptes. Falls Du im Editor keine Zeichen vor dem "<?php" finden kannst, betrachte die Datei mal mit einem Hexeditor.

Wenn Du mutig genug bist, kannst Du ja folgendes kleines Skript ausführen, dass den Anfang aller .php Dateien überprüft und falls erforderlich beschneidet. Wenn Du nur mit einigen wenigen Skripten Probleme hast, kopiere sie lieber mit dem folgenden Skript in ein eigenes Verzeichnis. Und Backups gehen natürlich immer noch vor.

Code:
<?php
  
function firstfive($file)
  {
    if(
is_readable($file))
    {
       
$fh fopen($file"r");
       
$buffer fread($fh5);
       
fclose($fh);
       
       return 
$buffer;
    }    
  }
  
  function 
repairbytes($file)
  {
    if(
is_writeable($file))
    {
       
$fh fopen($file"r");
       
$buffer fread($fh8);
       
fclose($fh);
       
       
$pos strpos($buffer"<?php");
       if( 
$pos === false OR $pos 1)
       {
         
// alles korrekt, kein Grund etwas zu aendern
         
return false;        
       } else
       {
          
$in file($file);
          
$in[0] = substr($in[0], $pos);
          
$fh fopen($file"w");
          foreach (
$in as $outfwrite($fh$out);
          
fclose($fh);
          
          return 
true;
       }
    } else
    {
        return 
false;
    }
    
  }
  
  foreach(
glob("*.php") as $filename)
  {
    
$start firstfive($filename);
    if(
$start == "<?php")
    {
      
printf("<b>%-20s</b>: %s<br>\r\n"$filenamehtmlspecialchars($start));
    } else
    {
      if (
repairbytes($filename) === true)
      {
        
printf("<b>%-20s</b>: %s (repariert)<br>\r\n"$filenamehtmlspecialchars($start));
      } else
      {
        
printf("<b>%-20s</b>: %s (Reparatur fehlgeschlagen)<br>\r\n"$filenamehtmlspecialchars($start));
      }
    }
  }
?>
« Letzte Änderung: 21. Oktober 2008, 23:02:03 von Gobo » Moderator informieren   Gespeichert

Wenn die Klugen immer nachgeben, geschieht nur das, was die Dummen wollen.
maatien
Neu hier
*
Offline Offline

Beiträge: 2


« Antworten #2 am: 22. Oktober 2008, 07:06:32 »
ZitierenZitat

Hey Gobo,

danke, dein Script hat geholfen.
Es wurde tatsächlich ein BOM gefunden und eleminiert. Ich frag mich nur, warum der überhaupt da war, da UTF-8 ja sowas eigentlich nicht braucht ...
Egal

Dank dir jedenfalls Smiley
Moderator informieren   Gespeichert
Gobo
nicht zu stoppen
*
Offline Offline

Beiträge: 1217



« Antworten #3 am: 22. Oktober 2008, 09:10:54 »
ZitierenZitat

Gerne, dazu ist ein Forum ja da Zwinkernd

Ich habe mir gerade mal die Wikipedia zum Stichwort Byte Order Mark angesehen und bin der Meinung, man könnte das Skript ja auch entsprechend anpassen, um wirklich nur BOM aus dem Quelltext zu entfernen, was das Skript deutlich weniger zerstörerisch ausfallen lassen würde.

In dem Wikipedia Artikel findet sich übrigens auch der Hinweis, dass mit PHP 6 das BOM ordentlich verstanden und behandelt werden wird, sodass das plumpe beschneiden der Quelltexte entfällt (ist ja eigentlich auch blöd, erst eine Markierung auf UTF zu setzen, um sie später wieder zu entfernen, obwohl der folgende Inhalt ja noch in UTF gespeichert ist).
Moderator informieren   Gespeichert

Wenn die Klugen immer nachgeben, geschieht nur das, was die Dummen wollen.
daryy
Neu hier
*
Offline Offline

Beiträge: 1


« Antworten #4 am: 07. Februar 2009, 05:35:21 »
ZitierenZitat

Really helps!Thanks!The Sterling AC Compressor include compressor, condenser, evaporator, accumulator or receiver-dryer, and expansion valve or orifice tube. ...We offer original Mercedes parts! Find best prices for Mercedes Benz 190E Parts by browsing our complete catalog of discount Mercedes auto parts.

« Letzte Änderung: 25. April 2010, 07:38:24 von daryy » Moderator informieren   Gespeichert

Provides porsche parts and  restoration products.
Seiten: [1]
AntwortenDrucken
CodeForum.chCode ForenPHPThema: Cannot send session cookie
Gehe zu:  

 

Partner Sites

Werbung

TinyPortal v1.0.5 beta 1© Bloc