Seite 1 von 2

PHP error nach Umfrage-Abstimmung

Verfasst: 07.11.2009, 17:51
von croxxx69
hallo,

habe auf der seite www.kava.hr rechts unten eine umfrage... habe meine seite etwas veraendert und jetzt nach eine abstimmung bekommt man ganz oben im header diese fehlermeldung:

Code: Alles auswählen

Warning: Cannot modify header information - headers already sent by (output started at /home/kavahr/public_html/index.html.php:1) in /home/kavahr/public_html/poll/poll_cookie.php on line 21
habe alles versucht, doch irgendwie klappt nichts...


P.S: also auf der seite https://www.kava.hr/indexok.html.php
habe ich die altere datei (vor den aenderungen) da geht die abstimmung ganz paletti... nur ich kann wirklich nicht den unterschied zwischen der neuen datei erkennen?!?!?!?!

Verfasst:
von

Verfasst: 07.11.2009, 18:11
von w3news
Wäre interessant was denn da im PHP- Code steht. Sieht aber so aus als wenn zum Beispiel eine 301er Weiterleitung per PHP nach dem Header steht.

Verfasst: 07.11.2009, 18:28
von croxxx69
der code der neuen datei ist:

Code: Alles auswählen

<?php
// Important! You have to include it before your html code
include_once "/home/kavahr/public_html/poll/poll_cookie.php";
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http&#58;//www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http&#58;//www.w3.org/1999/xhtml" xml&#58;lang="hr" lang="hr"><!-- InstanceBegin template="/Templates/index alles zu.dwt" codeOutsideHTMLIsLocked="false" --><head>
 <!-- InstanceBeginEditable name="head" -->
  <title>Kava portal - Svijet kave</title>
<!-- InstanceEndEditable -->
   <!-- InstanceBeginEditable name="doctitle" -->

<!-- InstanceEndEditable -->
  <meta name="description" content="KAVA - Zanimljivosti o kavi i najnoviji recepti. Kako kava utje&#269;e na zdravlje, naru&#269;ite prvu knjigu o kavi i tražite sve odgovore u specijaliziranom forumu o kavi" />
  <meta name="keywords" content="kava, kafa, kahva, recepti, espresso, cappuccino, kofein" />
  <meta http-equiv="cache-control" content="no-cache" />
  <meta http-equiv="pragma" content="no-cache" />
  <meta name="content-language" content="hr" />
  <meta http-equiv="content-type" content="text/html; charset=utf-8" />
  <meta name="verify-v1" 
  <link rel="stylesheet" type="text/css" href="pom.css"  />
  <script src="Scripts/swfobject_modified.js" type="text/javascript"></script>
  <script type='text/javascript'>
 function anzeigen&#40;das&#41;&#123;
 if&#40;document.getElementById&#40;das&#41;.style.display=='none'&#41; &#123;
  document.getElementById&#40;das&#41;.style.display='block';
 &#125;
 else &#123;
  document.getElementById&#40;das&#41;.style.display='none';
  &#125;
&#125;
  </script>
  <!-- InstanceParam name="description" type="text" value="KAVA - Zanimljivosti o kavi i najnoviji recepti. Kako kava utje&#269;e na zdravlje, naru&#269;ite prvu knjigu o kavi i tražite sve odgovore u specijaliziranom forumu o kavi" -->
<link rel="shortcut icon" href="SLIKE/favicon.ico" />
</head>
und der "alten" datei ohne fehler ist:

Code: Alles auswählen

<?php
// Important! You have to include it before your html code
include_once "/home/kavahr/public_html/poll/poll_cookie.php";
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http&#58;//www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http&#58;//www.w3.org/1999/xhtml" xml&#58;lang="hr" lang="hr"><!-- InstanceBegin template="/Templates/index alles zu.dwt" codeOutsideHTMLIsLocked="false" -->
  <head>
 <!-- InstanceBeginEditable name="head" -->
  <title>Kava portal - Svijet kave</title>
<!-- InstanceEndEditable -->
   <!-- InstanceBeginEditable name="doctitle" -->

<!-- InstanceEndEditable -->
  <meta name="description" content="KAVA - Zanimljivosti o kavi i najnoviji recepti. Kako kava utje&#269;e na zdravlje, naru&#269;ite prvu knjigu o kavi i tražite sve odgovore u specijaliziranom forumu o kavi" />
  <meta name="keywords" content="kava, kafa, kahva, recepti, espresso, cappuccino, kofein" />
  <meta http-equiv="cache-control" content="no-cache" />
  <meta http-equiv="pragma" content="no-cache" />
  <meta name="content-language" content="hr" />
  <meta http-equiv="content-type" content="text/html; charset=utf-8" />
  <meta name="verify-v1" 
  <link rel="stylesheet" type="text/css" href="../pom.css"  />
  <script src="../Scripts/swfobject_modified.js" type="text/javascript"></script>
  <script type='text/javascript'>
 function anzeigen&#40;das&#41;&#123;
 if&#40;document.getElementById&#40;das&#41;.style.display=='none'&#41; &#123;
  document.getElementById&#40;das&#41;.style.display='block';
 &#125;
 else &#123;
  document.getElementById&#40;das&#41;.style.display='none';
  &#125;
&#125;
  </script>
  <!-- InstanceParam name="description" type="text" value="KAVA - Zanimljivosti o kavi i najnoviji recepti. Kako kava utje&#269;e na zdravlje, naru&#269;ite prvu knjigu o kavi i tražite sve odgovore u specijaliziranom forumu o kavi" -->
<link rel="shortcut icon" href="SLIKE/favicon.ico" />
</head>

Verfasst:
von
Content Erstellung von ABAKUS Internet Marketing
Ihre Vorteile:
  • einzigartige Texte
  • suchmaschinenoptimierte Inhalte
  • eine sinnvolle Content-Strategie
  • Beratung und Umsetzung
Jetzt anfragen: 0511 / 300325-0

Re: PHP error nach Umfrage-Abstimmung

Verfasst: 07.11.2009, 18:29
von Mork vom Ork
croxxx69 hat geschrieben:

Code: Alles auswählen

Warning&#58; Cannot modify header information - headers already sent by &#40;output started at /home/kavahr/public_html/index.html.php&#58;1&#41; in /home/kavahr/public_html/poll/poll_cookie.php on line 21
Du bzw. dein Skript möchte auf den HTTP-Kopf zugreifen. Im HTTP-Kopf werden Zusatzdaten zum eigentlichen Inhalt übertragen.
Zu den Kopfdaten gehört zum Beispiel auch das Datum Set-Cookie, um ein Cookie an den Browser zu schicken. Dem Namen nach vermute ich mal, du rufst in poll_cookie.php in Zeile 21 die PHP-Funktion setcookie() auf, die besagte Zeile in den Kopf schreibt - oder zu schreiben versucht.

Nun werden die Kopfdaten vor dem Inhalt gesendet. Sobald der Inhalt auf die Leitung geht, können keine Kopfdaten mehr geschickt werden. Eben diesen Umstand teilt dir PHP in der Fehlermeldung mit: &#8222;headers already sent&#8220;, deshalb &#8222;Cannot modify header information&#8220;.

Mit dem Senden des Inhalts wurde im Skript index.php in Zeile 1 begonnen. Schaue also da nach, was dort steht. Beginnt die Zeile mit etwas Anderem als <?php, muss das Andere da weg und so weit runter, dass es erst nach besagtem setcookie()-Aufruf erscheint.
Zu diesem Anderen gehört ausdrücklich jedes einzelne Byte, auch Leerzeichen und Leerzeilen. Scheint index.php mit <?php zu beginnen, hast du die Datei möglicherweise utf-8-kodiert mit BOM gespeichert. BOM steht für byte order mark, ist ein Unicode-Steuerzeichen, steht üblicherweise ganz am Anfang des Unicode-Datenstroms (lies: der Datei) und wird als Steuerzeichen in einem Unicode-fähigen Texteditor nicht angezeigt, aber selbstredend vom Webserver als Inhalt ausgegeben. Abhilfe: Im Editor nach einer Möglichkeit suchen, ohne BOM zu speichern (zumindest Notepad++ kann das im Menü Format).

Verfasst: 07.11.2009, 18:33
von t-rex
Hi,

das ist wohl die typischste aller PHP Fehlermeldungen :-)

Es wird eine Header Information gesendet, obwohl die Textausgabe an den Browser schon gestartet wurde. In diesem Fall wird wohl, in der Date "poll_cookie.php" versucht ein Cookie zu setzen. Die Ausgabe wurde aber in der Datei "index.php.html" schon gestartet.

Wenn die zwei Index-Dateien syntaktisch gleich erscheinen, dann wird es wohl ein Leerzeichen oder ein Zeilenumbruch in der ersten Zeile sein, das vor "<?" oder nach "?>" rein gerutscht ist.

Sonnige Grüsse
HaPe

Verfasst: 07.11.2009, 19:13
von croxxx69
hmmmm... keine ahnung... weiss wirklich nicht wie ich das problem beheben kann... habe versucht mit dem texteditor die datei zu speichern, aber vergebens... wenn ich die datei speichern will steht unten im encoding utf8... nur wenn ich in eine andere kodierung nehme tut sich nichts, oder meine seite verliert paar "bauteile"...


p.s.: noch zur info habe ich eine template datei mit dreamweaver mit der ich die seiten erstelle...

doch habe ich versucht die dateien mit verschiedenen methoden zu speichern und es hilft bisher nichts

Verfasst: 07.11.2009, 19:56
von w3news
Also wenn ich die beiden Seiten jetzt online aufrufe funktionieren diese. Hast du jetzt was geändert oder sehe ich was anderes?

Verfasst: 07.11.2009, 20:06
von Mork vom Ork
croxxx69 hat geschrieben:nur wenn ich in eine andere kodierung nehme tut sich nichts, oder meine seite verliert paar "bauteile"...
Du sollst ja auch keine andere Kodierung nehmen, sondern utf-8 behalten und lediglich das BOM abschalten. Du kannst ja mal Notepad++ ausprobieren (Menü Format, Punkt utf-8 ohne BOM).

Es gibt davon abgesehen auch die Möglichkeit, den PHP-Ausgabepuffer mit der Zeile php_value output_buffering 2048 in der obersten .htaccess einzuschalten. Der Inhalt landet dann erstmal im Puffer, und so lange er da steckt, können noch Kopfdaten gesendet werden.

Wie dem auch sei: Wenn ich die Seite jetzt aufrufe, funktioniert's; es kommt sowohl dein Cookie als auch die Seite mit BOM.

Verfasst: 07.11.2009, 20:07
von croxxx69
also das passiert nur wenn due abstimmst... dann wenn die php die abstimmungsdaten holen will erscheint wohl die fehlermeldung... wenn du dann eine andere seite klickst, dann fubktioniert wieder alles... um wieder abzustimmen muss man die ip und cokies entfernen bzw. sich wieder anmelden damit man eine neue ip bekommt... aber dann erscheint wieder der fehler wenn man abstimmt...

Verfasst: 08.11.2009, 11:39
von croxxx69
ja, das problem war mit dem "BOM"... habe die seiten ohne bom gespeichert und jetzt geht wieder alles... na das ist ja ein komisches ding...

aufjedenfall vieeeelen dank an euch!!!!!!

Verfasst: 08.11.2009, 14:54
von 800XE
croxxx69 hat geschrieben: na das ist ja ein komisches ding...
Das ist nicht komisch, das ist eben so


Wenn du zwischen Parkplatz und STraße eine 1 Meter Breite Abfußrinne hast, die 2 Meter tief ist und normal Metallgitter drüber liegen .....
... und die Metalgitter mal nicht da sind, dan ist das nicht komisch wenn es mit dem Ausparken nicht klappt, das ist dann eben einfach so


Jetzt klappt es ja

(ich hab das Problem manchmal wenn ich debuge und dafür echos reinhaue ... gerade beim LogInScript ist das voll blöd ....
es funktioniert nicht = muß debugt werden .... debugen geht aber nicht weil es dann wegen der echos erstrecht nicht gehen kann, weil keien Cookies gesetzt werden können)

Verfasst: 09.11.2009, 11:05
von Hasenhuf
@ 800XE, ob_start() und ob_end_flush() sind deine Freunde.

Verfasst: 19.01.2010, 18:13
von croxxx69
wollte nochmal wegen diesen "bom" oder wie das heisst nachfragen wieso denn das entsteht? weil habe wieder das problem... habe aber keine lust jedes mal ueber 500 dateien manuell und einzeln mit dem notepad++ ohne bom zu speichern...

kann mir einer sagen:

1. wie ich alles automatisch ohne bom speichern kann?
2. wieso das problem auftritt? - benutze fireftp (firefox plugin) und da kann man einstellen ob man: mit binary mode, ascii mode oder automatic die uebertragung haben will... ist wohl da das problem?

Verfasst: 19.01.2010, 18:44
von Mork vom Ork
croxxx69 hat geschrieben:wollte nochmal wegen diesen "bom" oder wie das heisst nachfragen wieso denn das entsteht?
Steht oben bereits. Lange Erklärung:

BOM steht für byte-order mark und bezeichnet zwei Bytes, die angeben, in welcher Reihenfolge zusammengehörige Bytes erscheinen.

Wenn du im Dezimalsystem auf Kästchenpapier eine Zahl größer 9 aufschreiben willst, brauchst du zwei Kästen (ab Einhundert drei, etc). Üblich ist es, die höherwertige Ziffer zuerst zu schreiben und dann in den rechts folgenden Kästchen die niederwertigeren; für Dreizehn schreibst du also zuerst die Ziffer 1, rechts gefolgt von der Ziffer 3, macht die Zahl 13.

In der Computertechnik läuft es genauso, nur dass statt Ziffern Bytes eingesetzt werden, Zahlen größer als 255 benötigen zwei oder mehr Bytes.
Nun gibt es aber verschiedene Systemarchitekturen, manche speichern die höherwertigen Bytes zuerst, andere beginnen mit dem niederwertigsten. Es gibt also quasi nicht nur Rechner, die die Zahl Dreizehn als 1 und 3 speichern, manche speichern auch als 3 und 1. Es gibt ja auch Sprachen, die von recht nach links geschrieben werden, Arabisch oder Hebräisch zum Beispiel.
Mit den Bits in den Bytes gibt es übrigens das gleiche Problem.

Und genau dafür ist das BOM da: Es zeigt an, in welcher Reihenfolge die Bits und Bytes im Datenstrom erscheinen.
1. wie ich alles automatisch ohne bom speichern kann?
In notepad++ im Menü Einstellungen, Punkt Optionen, Karte Neu/Öffnen/Speichern. Dort findest du in der linken Hälfte unübersehbar verschiedene Möglichkeiten für die Kodierung neuer (!) Dateien.

Wie du existierende Dateien manuell änderst, steht oben. Für die Automatik musst du dir vermutlich ein Skript schreiben.

Dass du stattdessen auch PHPs Ausgabepuffer aktivieren kannst, steht ebenfalls bereits oben.
2. wieso das problem auftritt? - benutze fireftp (firefox plugin) und da kann man einstellen ob man: mit binary mode, ascii mode oder automatic die uebertragung haben will... ist wohl da das problem?
Das hat mit FTP nichts zu tun. Im ASCII-Modus von FTP werden die Zeilenendesequenzen automatisch geändert; Unix und andere Systeme nutzen das Zeichen Zeilenvorschub (\n) als Zeilenende, zumindest die alten Macs den Wagenrücklauf (\r) und DOS/Windows Wagenrücklauf und Zeilenvorschub zusammen (\r\n).
Diese Unterschiede sind der Grund dafür, dass man im Windows-Texteditor Textdateien, die unter Unix-kompatiblen System erstellt wurden, nicht vernünftig lesen kann, weil alles in einer Zeile angezeigt wird. In notepad++ hast du stattdessen rechts unten ein Statusfeld, dass dir den aktuellen Modus anzeigt.

Hat aber, wie gesagt, mit deinem BOM-Problem nichts zu tun. Das BOM schreibt das Programm, dass die Textdatei erzeugt hat.

Verfasst: 19.01.2010, 19:11
von croxxx69
ach so... danke... es ist mir ein wenig verstaendlicher geworden...

also muss irgendein script erstellen damit ich alle aufeinmal bearbeiten kann?
oh je...

und noch eine frage... wenn ich die dateien mit dem "normalen" editor won windows (notepad) aufmache, wie soll ich die dateien abspeichern?
ansi
unicode
unicode big endian
utf-8
?


EDIT: schade... habe versucht mit meinen templates (von dreamweaver erstellt) automatisch alles ohne bom zu erstellen... leider... geht es nicht so wie ich es mir vorgestellt habe...