php-fehlermeldung nach countereinbau

molchi

Enthusiast
Thread Starter
Mitglied seit
23.05.2008
Beiträge
234
hey ihr, ich soll nem kumpel nen counter auf seine HP bauen, hab selbst aber noch null php-ahnung (fang grad erst in nem Kurs mit dem lernen an ^^). Habs extra 1:1 nach anleitung getan.
Die Seite ansich ging nachm hochstellen astrein, allerdings stand ganz oben folgende Fehlermeldung:

Warning: Cannot modify header information - headers already sent by (output started at /www/htdocs/xnopel/index.php:1) in /www/htdocs/xnopel/count_skript.php on line 57


das hier is der auszug der index.php:

<?PHP require_once "count_skript.php"; ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">


Und das der Zeilenbereich ausm counter_scrypt:

if (empty($_COOKIE['counter'])) {
setcookie("counter", "true", time()+IP_BLOCKTIME_H*3600, "/", ".{$_SERVER['HTTP_HOST']}");
}



Könnt ihr mir sagen wie ich den fehler wegkrieg? Wenn ichs per XAMPP auf meinem Rechner aufmach kommt die Meldung nicht, dafür geht auf meinem Webspace gleichdie ganze Seite nicht :mad:


Dank euch schonmal
 
Zuletzt bearbeitet:
Wenn Du diese Anzeige nicht sehen willst, registriere Dich und/oder logge Dich ein.
setcookie benutzt den HTTP header um einer cookie rauszuschicken und das geht nur wenn auf der seite noch nichts an den Browser geschickt hat.

vor dem require_once darf kein zeichen oder sonstwas stehen, das <?php muss als allererstes ausgefuehrt werden.

Verwendest du irgendein cms oder so?
 
vor dem <?php require__once steht absolut nichts, is das allererste, auch keine leerzeichen, etc.

Nein benutz kein CMS, wurde alles von meinem Kumpel per Dreamweaver gemacht.
 
irgendwo ein echo oder so vor der zeile 57 in der "count_skript.php"? irgendwelche anderen fehlermeldungen?
 
Auch kein "include" o. ä. vor dem setcookie?

Mal mit "include_once()" probiert?

Vllt. liegt der Fehler ja im Counter selbst?

Und wenn du ohne Cookie arbeitest? Gibt ja Scripts die die IPs in Textdateien speichern und so doppeltes Zählen verhindern.
 
also nen echo definitiv nein, weitere fehlermeldungen auch nicht.
Problem ist ich kanns eben bei mir nicht tetsten da mein webspace die datei erst grnicht öffnet, und per YAMPP die meldung nicht da ist.

@sabbermaul: wo das include_once hin? in die 1. Indexzeile? Wie gesagt, hab von php noch fast null ahnung.

Flls das script jemand sehen will kann die php auf meinen webspace laden, alternativ wars nen free download von um-fritz.de
 
wirklich keiner ne idee??
Hab die seite mal bei funpic hochgeladen (ohne bilder, die hat ich nicht vom kumpel ^^), auf funpic kommt allerdings die meldung nichtmehr, sondern "nurnoch" links oben undefinierbare zeichen :confused:
 
lass mal den sourcecode der "count_skript.php" sehen
 
urgs, das ding is dank aukommentierung 260 zeilen lang ^^ sicher das du den ganz willst? Glaub nachwievor irgendwas läuft in der index schief, hatte den counter schonmal testhalber auf ner anderen seite (nur nen bild und der counter) und hatte die meldung nicht.
 
wenn der counter ganz oben in der index ist und davor keine zeichen sind dann liegt es eher nicht an der index...

ist halt schwer da vermutungen anzustellen ohne den code
 
ok, auf deine gefahr^^:

<?PHP
error_reporting(E_ALL ^E_NOTICE);
############################################################################
# um-Counter Skript V1.00 #
# zur freien Verwendung, d. h. keinerlei Lizenzen oder Copyright #
# ein Backlink wäre aber nett! #
# Auf jeden Fall aber bitte diesen Tag im XHTML Template einbinden: #
# <meta name="Generator" content="script by http://um-fritz.de" /> #
# Danke und viel Spaß! #
# http://um-fritz.de #
############################################################################

############# START KONFIGURATIONSTEIL ##########################
# Angabe der Stunden, für die IP's geblockt bleiben
define("IP_BLOCKTIME_H", 1);

# Hier den Pfad angeben, relativ zur PHP-Datei, welche dieses Skript
# inkludiert. (require_once). Liegen diese Dateien im gleichen Verzeichnis,
# kann diese Konstante leer bleiben. [Beispiel: define("PFAD", "foo/bar/");
define("PFAD", "");
# Anzahl der Einträge in der IP Liste. Wenn sie ungefähr abschätzen
# können, wieviele Besucher durchschnittich pro Stunde ihre Seite Besuchen,
# dann multiplizieren Sie diese Zahl mit der für IP_BLOCKTIME_H angegebenen
# Zahl + ca. 20% Puffer. Je kürzer diese Liste, umso schneller das Skript
define("LENGTH_IP_LIST", 100);

# Hier können Sie bestimmen ob die Anzeige als Text oder als Grafik
# erfolgen soll. Mögliche Werte: "text" "grafik"
define("COUNTER_STYLE", "grafik");

# Hier können Sie bestimmen ob die Anzeige vorgegebene Stellenanzahl haben
# soll. Bei 0 werden z. B. nur die Ziffern der Zugriffe ausgegeben, bei 6
# z.B. immer 6 Stellen, auch bei z.B. 5 Einträgen, etwa: 5 oder 000005.
# Interessant vielleicht bei der Ausgabe in einem grafischen Interface
define("SHOW_LENGTH", 5);

# Hier das Grafikformat der Zifferngrafiken als Dateiendung angeben, Groß-
# und Kleinschreibung beachten! Möglich wären z. B. "png" "gif" "jpg"
# "jpeg" oder Ähnliches.
define("GRAFIK_FORMAT", "gif");

# Das war's, der Rest sollte automatisch gehen. Nur nicht vergessen, den
# Textdateien im Unterverzeichnis /counter_files ausreichende Lese- und
# Schreibrechte zu geben. (chmod 0666)
############# ENDE KONFIGURATIONSTEIL ##########################

############################################################################

############# START SKRIPTTEIL #################################

#Wenn Referer von dieser Domain oder Cookie gesetzt counter ausgeben
if (preg_match("@{$_SERVER['HTTP_HOST']}@", $_SERVER['HTTP_REFERER']) ||
$_COOKIE['counter'] == "true") {
$ausgabe = show_counter();
} else { #Kein Cookie oder kein || fremder Referer: ggf. Cookie setzten, IP ermitteln&abgleichen, ggf. IP Liste aufräumen
if (empty($_COOKIE['counter'])) {
setcookie("counter", "true", time()+IP_BLOCKTIME_H*3600, "/", ".{$_SERVER['HTTP_HOST']}");
}
$ip = get_ip();
$ip_exists = check_ip_list($ip);
#Wenn neuer Zugriff, counter erhöhen und speichern
if ($ip_exists == false) {
increase_save_count();
}
#Counter Anzeigen
$ausgabe = show_counter();
}

############# ENDE SKRIPTTEIL #################################

############################################################################
# FUNKTIONEN #
############################################################################

function get_ip() {
unset($ip);
if ($_SERVER['HTTP_X_FORWARDED_FOR']) {
$temp = explode(",", $_SERVER['HTTP_X_FORWARDED_FOR']);
$ip = $temp[0];
} else {
if ($_SERVER['HTTP_CLIENT_IP']) {
$ip = $_SERVER['HTTP_CLIENT_IP'];
} else {
$ip = $_SERVER['REMOTE_ADDR'];
}
}
if (preg_match("@\d+\.\d+\.\d+\.\d+@is", $ip)) {
return($ip);
} else {
return("0.0.0.0");
}
}

function check_ip_list($ip) {
if (!file_exists(PFAD."counter_files/ip_list.txt")) {
error("no_counter_file");
} else {
$ip_listing = file(PFAD."counter_files/ip_list.txt");
}
$parent_time = time();
#Wenn ip_liste länger LENGTH_IP_LIST, Einträge älter als IP_BLOCKTIME_H*3600 löschen
if (count($ip_listing) > LENGTH_IP_LIST) {
$update = false;
foreach ($ip_listing as $key => $wert) {
$save_time = trim(preg_replace("@ \+\+ (.*)@", "", $wert));
if (($parent_time - $save_time) > (IP_BLOCKTIME_H*3600)) {
unset($ip_listing[$key]);
$update = true;
}
}
if ($update == true) {
$new_ip_list = $ip_listing;
$new_ip_line = "";
save_to_ip_list($new_ip_list, $new_ip_line);
}
}
#Wenn ip_liste leer ist IP speichern und false zurück
if(empty($ip_listing)) {
$new_ip_list = "";
$new_ip_line = trim($parent_time)." ++ ".trim($ip);
save_to_ip_list($new_ip_list, $new_ip_line);
return(false);
} else { #Wenn ip_liste nicht leer ist, Liste durchgehen:
#Wenn IP noch nicht gespeichert, $ip_gefunden = false; timestamp_update = false
$ip_gefunden = false;
$timestamp_update = false;
foreach ($ip_listing as $key => $wert) {
$saved_ip = trim(preg_replace("@\d+ \+\+@is", "", $wert));
#Wenn IP in Liste gefunden wird $ip_gefunden=true
if ($ip == $saved_ip) {
$ip_gefunden = true;
#Wenn Alter des Eintrages älter als IP_BLOCKTIME_H*3600: $timestamp_update = true;
$save_time = trim(preg_replace("@ \+\+ (.*)@", "", $wert));
if (($parent_time - $save_time) > (IP_BLOCKTIME_H*3600)) {
$timestamp_update = true;
$ip_entry = $key;
}
break;#IP gefunden und auf update überprüft, foreach kann abbrechen
}
}
}
#IP gefunden:
if ($ip_gefunden == true) {
if ($timestamp_update == true) { #aber nicht mehr zeitgeblockt
array_splice($ip_listing, $ip_entry, 1);
$new_ip_list = $ip_listing;
$new_ip_line = trim($parent_time)." ++ ".trim($ip);
save_to_ip_list($new_ip_list, $new_ip_line);
$ip_exists = false;
} else { #IP wurde gefunden und ist zeitgeblockt
$ip_exists = true;
}
} else { #IP nicht gefunden
$new_ip_list = $ip_listing;
$new_ip_line = trim($parent_time)." ++ ".trim($ip);
save_to_ip_list($new_ip_list, $new_ip_line);
$ip_exists = false;
}
return($ip_exists);
}

function save_to_ip_list($new_ip_list, $new_ip_line) {
if (!file_exists(PFAD."counter_files/ip_list.txt")) {
error("no_ip_list_file");
} elseif (!is_writable(PFAD."counter_files/ip_list.txt")) {
error("ip_list_unwriteable");
} else {
if (is_array($new_ip_list)) {
foreach($new_ip_list as $key => $wert) {
$update_ip_list .= trim($wert)."\n";
}
} else {
$update_ip_list = $new_ip_list;
}
if (isset($new_ip_line)) {
$update_ip_list .= $new_ip_line;
$_SERVER['ip_saved'] = true;
}
$fh = fopen(PFAD."counter_files/ip_list.txt","wb");
flock($fh, LOCK_EX);
fwrite($fh, $update_ip_list);
fclose($fh);
}
return;
}

function increase_save_count() {
if (!file_exists(PFAD."counter_files/count.txt")) {
error("no_counter_file");
} elseif (!is_writable(PFAD."counter_files/count.txt")) {
error("count_unwriteable");
} else {
$counts = file(PFAD."counter_files/count.txt");
$count = trim($counts[0]);
$count++;
$fh = fopen(PFAD."counter_files/count.txt","wb");
flock($fh, LOCK_EX);
fwrite($fh, $count);
fclose($fh);
}
return;
}

function show_counter() {
global $ip;
if (!file_exists(PFAD."counter_files/count.txt")) {
error("no_counter_file");
}
$counterlines = file(PFAD."counter_files/count.txt");
$zero_length = (string) trim($counterlines[0]);
$lead_zero = SHOW_LENGTH - strlen($zero_length);
if (COUNTER_STYLE == "grafik") { #Grafische Ausgabe:
$grafik_format = GRAFIK_FORMAT;
if (SHOW_LENGTH > strlen($zero_length)) {
for ( $i = 0; $i < $lead_zero; $i++) {
$bild_info = getimagesize(PFAD."counter_files/0.".GRAFIK_FORMAT);
$zero_grafik .="<img src=\"".PFAD."counter_files/0.".GRAFIK_FORMAT."\" {$bild_info[3]} alt=\"0\" />";
}
}
for($i = 0; $i < strlen($zero_length); $i++) {
$bild_info = getimagesize(PFAD."counter_files/{$zero_length[$i]}.".GRAFIK_FORMAT);
$grafik .= "<img src=\"".PFAD."counter_files/{$zero_length[$i]}.".GRAFIK_FORMAT."\" {$bild_info[3]} alt=\"{$zero_length[$i]}\" />";
}
$count = $zero_grafik.$grafik;
#Grafische Ausgabe der IP
if ($_SERVER['ip_saved'] == false) {
$bild_info = getimagesize(PFAD."counter_files/none.$grafik_format");
$ip_show .= "<img src=\"".PFAD."counter_files/none.$grafik_format\" {$bild_info[3]} alt=\"Keine\" />";
} else {
for($i = 0; $i < strlen($ip); $i++) {
if ($ip[$i] == ".") {
$bild_info = getimagesize(PFAD."counter_files/dot.$grafik_format");
$ip_show .= "<img src=\"".PFAD."counter_files/dot.$grafik_format\" {$bild_info[3]} alt=\".\" />";
} else {
$bild_info = getimagesize(PFAD."counter_files/{$ip[$i]}.$grafik_format");
$ip_show .= "<img src=\"".PFAD."counter_files/{$ip[$i]}.$grafik_format\" {$bild_info[3]} alt=\"{$ip[$i]}\" />";
}
}
}
} else { #Textausgabe
if (SHOW_LENGTH > strlen($zero_length)) {
for ( $i = 0; $i < $lead_zero; $i++) {
$text .="0";
}
}
$text .= (string) trim($counterlines[0]);
$count = $zero_text.$text;
#Textausgabe IP
if ($_SERVER['ip_saved'] == false) {
$ip_show = "Keine";
} else {
$ip_show .= $ip;
}
}
$ausgabe['count'] = $count;
$ausgabe['ip-show'] = $ip_show;
unset($_SERVER['ip_saved']);
return($ausgabe);
}

function error($error_code) {
$error_msg = "<h1>Fehlermeldung:</h1>\n";
switch ($error_code) {
case "no_counter_file" :
$error_msg .= "<p>Die Datei ".PFAD."counter_files/count.txt existiert nicht!</p>";
break;
case "count_unwriteable" :
$error_msg .= "<p>Die Datei ".PFAD."counter_files/count.txt kann nicht beschrieben werden!</p>
Wahrscheinlich sind ungenügende Zugriffsrechte gesetzt (chmod 0666).</p>";
break;
case "no_ip_list_file" :
$error_msg .= "<p>Die Datei ".PFAD."counter_files/ip_list.txt existiert nicht!</p>";
break;
case "ip_list_unwriteable" :
$error_msg .= "<p>Die Datei ".PFAD."counter_files/ip_list.txt kann nicht beschrieben werden!
Wahrscheinlich sind ungenügende Zugriffsrechte gesetzt (chmod 0666).</p>";
break;
}
echo $error_msg;
exit;
}
?>



irritierend find ich eben grad auf der funpicseite diese komischen zeichen, die hatte ich nochnie :P

ups, link zur funpicseite: molchilein/mo.funpic.de/counter
 
mach mal testweise ganz unten das ?> weg...

sonst keine ahnung... und der funpic link funzt net
 
das ganz unten?? dann is php ja immer offen ^^
witzig ist eben das das script exakt in der form vor 3 tagen auf ner anderen seite noch lief und ich aaaabsolut nichts geändert hab.

im link hab ich mich vertippt: molchilein.mo.funpic.de/counter

links tippen is heut nicht mein ding ^^

p.s.: hier der link auf die eigentlich countdatei, da geht er astrein: http://molchilein.mo.funpic.de/counter/counter.php
 
Zuletzt bearbeitet:
das ganz unten?? dann is php ja immer offen ^^
ja, das ist auch vollkommen richtig so. php ist eh mit dem ende der datei abgeschlossen und nach dem ?> koennen sich noch unsichtbare zeichen einschleichen die dann probleme machen
 
ok, werds mal weg tun, auch wen ich nieemals glaub dases das is, wie gesagt, der counter ansich geht ja wie auf dem link zu sehen, und zuvor ginger eben auch.
Irgendwo muß was an/in der index nich ok sein, nur keinen plan was, ich gebs bald auf und verlink auf nen fertigen counter im netz :(
 
ja, daran wirds auch nicht liegen, nur eben auf nummer sicher. aber keine ahnung woran es liegen koennte, da fehlt zu viel drumrum.

wobei ich aber wirklich auch einen "externen" counter setzen wuerde. ich bin mit blogcounter.de ganz zufrieden
 
die dümsten wege elfen manchmal, ab und zu sollt ich doch denken ^^

Hab jetzt die alte testseite (die nur aus nem bild und dem counter bestand) genommen, hab den kompletten code nach dem php require_once durch den aus der jetzigen index ersetzt im windows editor, neu abgespeichert und siehe da, die seite geht sogar auf meinem webspace der se zuvor nichtmal geöffnet hatte ^^

Also hat DW/ich wohl beim speichern murks gemacht ^^

Hab auch bei google irgendwas darüber gefunden das das zeichen was dauernd kam irgendwas mit der zeichencodierung der seite oder des webspaces zu tun hat oder so (versteh langsam nurnoch bahnhof) ^^


Trotzdem dir heeerzlichsten dank für die hilfsversuche
 
Wirf mal oben ein elegantes "ob_start();" hin. Dann sollts funken :)
 
Hardwareluxx setzt keine externen Werbe- und Tracking-Cookies ein. Auf unserer Webseite finden Sie nur noch Cookies nach berechtigtem Interesse (Art. 6 Abs. 1 Satz 1 lit. f DSGVO) oder eigene funktionelle Cookies. Durch die Nutzung unserer Webseite erklären Sie sich damit einverstanden, dass wir diese Cookies setzen. Mehr Informationen und Möglichkeiten zur Einstellung unserer Cookies finden Sie in unserer Datenschutzerklärung.


Zurück
Oben Unten refresh