 |
| Hinweise |
Willkommen im TP-Hilfe-Forum!Dies ist ein Forum zu den Themen Photoshop, Dreamweaver, Flash, Selbständigkeit und mehr, in dem Du Hilfe, Anleitung oder eine Lösung zu Deinen Problemen erhältst. Aktuell bist Du in unseren Foren als Gast mit reinen Leserechten unterwegs. Wenn Du Dich registrierst, kannst Du eigene Themen verfassen, Deine Frage stellen und privat mit anderen TPlern kommunizieren. Weitere Foren werden zugänglich, und Du wirst – falls gewünscht – per Mail über neue Beiträge informiert. Die Registrierung ist schnell und kostenlos. Sollten bei der Registrierung Fragen auftauchen, reicht ein Klick in unsere Hilfe - Häufig gestellte Fragen oder eine kurze Mitteilung an das Support-Team. Viel Spaß bei Traum-Projekt.com |
22.11.2004, 16:22
|
#1
|
|
TP-Junior
Registriert seit: Nov 2004
Ort: Esslingen
|
Klickzähler.php wird bei IE 2 Mal ausgeführt?
Hallo,
auf einer Homepage im Musikbereich bieten wir den Besuchern an, RealAudio- bzw. mp3-Ausschnitte anzuhören. Da wir registrieren möchten, welcher Titel wie oft gehört wird, rufen wir bei den Links zum Anhören der Musik ein php auf, welches mittels header(...) und readfile(...) die Musikdatei an den Browser ausliefert und anschließend in der MySql-Datenbank den jeweiligen Zähler um 1 erhöht. Nun ist es jedoch dummerweise so, dass offensichtlich bei Aufruf über den IE irgendwie 2 hochgezählt wird. Dies kann ja eigentlich nur sein, wenn das php 2 Mal hintereinander aufgerufen wird - aber aus welchem Grund? Vom NS aus, funktioniert das Ganze wie gewünscht (zählt also nur 1 Mal hoch). Hat jemand eine Idee, woran das liegen könnte?
Hier der entscheidende Ausschnitt aus der php-Datei zum Zählen der Klicks (Quelltext sieht wegen Tests vielleicht etwas umständlich aus):
PHP-Code:
if ($typ == "ra")
{
header('Content-type: audio/x-pn-realaudio');
readfile($audiopath . $datei);
// Die ra Statistik bei dem angegebenen Mix 1 erhöhen
$abfrage="SELECT stat_ra FROM mixe WHERE id='$id'";
$result = mysql_query($abfrage);
if ($result == false)
{
$error = "Datenbankfehler: " . mysql_error();
$errortip = "";
include("error.php");
}
while($reihe = mysql_fetch_array($result, MYSQL_ASSOC))
{
$e_stat_ra = $reihe["stat_ra"];
}
$e_stat_ra = $e_stat_ra + 1;
$abfrage = "UPDATE mixe SET stat_ra='$e_stat_ra' WHERE id='$id'";
$result = mysql_query($abfrage);
if ($result == false)
{
$error = "Datenbankfehler: " . mysql_error();
$errortip = "";
include("error.php");
}
}
Und hier der Link zum Aufrufen:
HTML-Code:
<a href="../shared/audio.php?typ=ra&id=<? echo $e_mixid; ?>&datei=<? echo $audiodateiname . ".ram"; ?>">
|
|
|
22.11.2004, 17:51
|
#2
|
|
TP-Specialist
Registriert seit: Nov 2004
Ort: Ich komme aus dem Zauberwald
|
Zitat:
|
Nun ist es jedoch dummerweise so, dass offensichtlich bei Aufruf über den IE irgendwie 2 hochgezählt wird.
|
Da php eine serverseitige Skriptsprache ist, ist der Browser auf der Frontend Seite erschreckend egal; ich seh deinem Code (abgesehen davon, dass er sehr unschön ist  ) auch nichts an, das dem IE veranlassen würde, die Seite zweimal zu laden.
Generell würde ich erstmal die Reihenfolge ändern: Erst statistik, dann Daten Streamen.
Danach würd ich mal in die access_log schauen, obs wirklich zweimal aufgerufen wird.
__________________
Zwei Dinge sind Unbestreitbar:- In einem Land, in dem Amerika Krieg führt, herrscht nachher Demokratie.
- Die Erde ist eine Scheibe!
Aktuelle Abendlektüre: Stephen King, Peter Strauch: Das schwarze Haus (Black House, 2001)
Aktuelle Bewertung: Abgesehen davon, dass der Roman mal wieder demonstriert, dass der Author geistesgestört ist, sehr träge; wenig Spannung; schlechter Erzählstil. King halt^^!
|
|
|
22.11.2004, 18:33
|
#3
|
|
TP-Junior
Registriert seit: Nov 2004
Ort: Esslingen
|
Nun ja, es ist definitv so, dass beim Anklicken der Links beim NS nur 1 Mal gezählt wird, und beim IE definitiv 2 Mal. Da in meinem Script definitiv nur 1 weitergezählt wird, kann das ja eigentlich nur daran liegen, dass es vom IE zweimal hintereinander aufgerufen wird - denke ich.
Zuerst hatte ich auch das Streaming ganz am Ende, ändert aber nichts am Resultat.
Das mit dem access_log muss ich noch nachschauen.
Dachte mir, dass es sich hierbei vielleicht um ein bekanntes Phänomen handeln könnte ...
|
|
|
22.11.2004, 18:35
|
#4
|
|
TP-Specialist
Registriert seit: Nov 2004
Ort: Ich komme aus dem Zauberwald
|
Nicht wirklich bekannt; notfalls mal versuchen, weitere (wichtige) Headerinformationen zu senden. So liebe Sachen wie Cache, Size, Filename usw.
[edit]
Änder mal header('Content-type: audio/x-pn-realaudio'); um, so dass er es als Download sendet, und nicht als realaudio.
PHP-Code:
header('Content-Transfer-Encoding: none');
header("Content-Type: application/force-download");//^^damits auch ja überall klappt
header("Content-Type: application/octet-stream"); //^^damits auch ja überall klappt
header("Content-Type: application/download"); //^^ damits auch ja überall klappt
__________________
Zwei Dinge sind Unbestreitbar:- In einem Land, in dem Amerika Krieg führt, herrscht nachher Demokratie.
- Die Erde ist eine Scheibe!
Aktuelle Abendlektüre: Stephen King, Peter Strauch: Das schwarze Haus (Black House, 2001)
Aktuelle Bewertung: Abgesehen davon, dass der Roman mal wieder demonstriert, dass der Author geistesgestört ist, sehr träge; wenig Spannung; schlechter Erzählstil. King halt^^!
Geändert von Dennis The Menace (22.11.2004 um 18:44 Uhr).
|
|
|
22.11.2004, 20:08
|
#5
|
|
TP-Insider
Registriert seit: May 2003
Ort: Aachen
|
Kann es vielleicht an dem DL Blocker vom neuen IE liegen, der die Dateien analysiert bevor er sie für den DL freigibt?
Ist nur ne Idee, die mir dazu spontan einfällt.
__________________
"Man muss die Welt nicht verstehen, man muss sich nur darin zurechtfinden."
Einstein
|
|
|
22.11.2004, 20:36
|
#6
|
|
TP-Specialist
Registriert seit: Nov 2004
Ort: Ich komme aus dem Zauberwald
|
Meine Idee war ähnlich, im sinne von, dass der IE beim ersten Aufruf halt den Realplayer öffnet und de rRealplayer selbst nochmal ne Verbindung zum Link aufbaut.
__________________
Zwei Dinge sind Unbestreitbar:- In einem Land, in dem Amerika Krieg führt, herrscht nachher Demokratie.
- Die Erde ist eine Scheibe!
Aktuelle Abendlektüre: Stephen King, Peter Strauch: Das schwarze Haus (Black House, 2001)
Aktuelle Bewertung: Abgesehen davon, dass der Roman mal wieder demonstriert, dass der Author geistesgestört ist, sehr träge; wenig Spannung; schlechter Erzählstil. King halt^^!
|
|
|
22.11.2004, 21:57
|
#7
|
|
TP-Insider
Registriert seit: Jun 2001
Ort: Berlin
|
Warum nicht counter und stream trennen?
Datei mit counter wird aufgerufen und leitet dann weiter an die stream Datei.
__________________
<table> was my first love and it will be my last
|
|
|
23.11.2004, 00:20
|
#8
|
|
TP-Junior
Registriert seit: Nov 2004
Ort: Esslingen
|
Zitat:
|
Zitat von deck16
Warum nicht counter und stream trennen?
Datei mit counter wird aufgerufen und leitet dann weiter an die stream Datei.
|
Gute Idee. Muss ich mal so versuchen. Kommt aber nur in Frage, wenn außer dem Real/Media-Player kein weiteres Fenster erscheint. Das ist Vorgabe.
|
|
|
23.11.2004, 00:30
|
#9
|
|
TP-Junior
Registriert seit: Nov 2004
Ort: Esslingen
|
Zitat:
|
Zitat von Dennis The Menace
Nicht wirklich bekannt; notfalls mal versuchen, weitere (wichtige) Headerinformationen zu senden. So liebe Sachen wie Cache, Size, Filename usw.
[edit]
Änder mal header('Content-type: audio/x-pn-realaudio'); um, so dass er es als Download sendet, und nicht als realaudio.
PHP-Code:
header('Content-Transfer-Encoding: none');
header("Content-Type: application/force-download");//^^damits auch ja überall klappt
header("Content-Type: application/octet-stream"); //^^damits auch ja überall klappt
header("Content-Type: application/download"); //^^ damits auch ja überall klappt
|
OK. Das hatte den Effekt, dass wenn alle (oder auch nur eine) dieser Zeilen enthalten sind, die .php-Datei selbst zum Download angeboten wird. ABER: Dann wird auch beim IE nur 1 Mal gezählt. Also hat es offensichtlich etwas damit zu tun, auf welche Art der RealPlayer vom IE aufgerufen wird. Denn der NS macht das ja definitiv anders.
|
|
|
23.11.2004, 00:44
|
#10
|
|
TP-Specialist
Registriert seit: Nov 2004
Ort: Ich komme aus dem Zauberwald
|
Naja, dann würd ich einfach ne 10 Sekunden IP Sperre für den Counter implementieren, oder eine html Weiterleitung von einer count.php zur stream.php
Zitat:
|
.php-Datei selbst zum Download angeboten wird.
|
Naja, man gibt ja die restlichen Header wie Dateiname/Größe auch an^^
PHP-Code:
header('Pragma: public');
header('Last-Modified: '.gmdate('D, d M Y H:i:s') . ' GMT');
header('Cache-Control: no-store, no-cache, must-revalidate'); // HTTP/1.1
header('Cache-Control: pre-check=0, post-check=0, max-age=0'); // HTTP/1.1
header('Content-Transfer-Encoding: none');
header("Content-Type: application/force-download");
header("Content-Type: application/octet-stream");
header("Content-Type: application/download");
header('Content-Disposition: inline; filename="' . $selection . '"');
header("Content-length: ".filesize($file));
readfile($file);
exit;
Das scheint mit den meisten Browsern fehlerfrei zu funktionieren
__________________
Zwei Dinge sind Unbestreitbar:- In einem Land, in dem Amerika Krieg führt, herrscht nachher Demokratie.
- Die Erde ist eine Scheibe!
Aktuelle Abendlektüre: Stephen King, Peter Strauch: Das schwarze Haus (Black House, 2001)
Aktuelle Bewertung: Abgesehen davon, dass der Roman mal wieder demonstriert, dass der Author geistesgestört ist, sehr träge; wenig Spannung; schlechter Erzählstil. King halt^^!
Geändert von Dennis The Menace (23.11.2004 um 00:47 Uhr).
|
|
|
23.11.2004, 00:47
|
#11
|
|
TP-Insider
Registriert seit: Jun 2001
Ort: Berlin
|
Mach doch folgendes.
Besorg dir ein Programm was dir alle HTTP header beim Aufruf anzeigt, sowas wie ein kleiner Proxy Server oder so.
Dann rufst du ein realfile mal direkt mit den verschiedenen Browsern auf und notierst dir die header.
Dann baust du entweder eine Browserweiche in dem streamscript, welches die entsprechenden header liefert oder probierst eine Kombination aus, die mit allen Browsern kompatibel ist.
__________________
<table> was my first love and it will be my last
|
|
|
23.11.2004, 00:51
|
#12
|
|
TP-Moderator
Registriert seit: Feb 2001
Ort: Helmstedt/Wolfsburg
|
Das Problem kenne ich z.B. bei dynamischen PDF-Dateien. Am einfachsten kann man das lösen, indem man den count zusätzlich in einer Session "flaggt". Und aufgrund dessen nicht den echten Counter nutzt sondern die session hochzählt. Ist die Session bei 2 wurde das Dokument einmal angezeigt -> Session zurücksetzen und man ist auf dem aktuellen Stand.
Gruss
Jan
EDIT
...ist nurmal ganz grob angerissen... man muss die session natürlich auch in anderen Fällen säubern... z.B. bei der Anzeige der Datei/Linkliste
Geändert von Stuck Mojo (23.11.2004 um 00:53 Uhr).
|
|
|
23.11.2004, 02:28
|
#13
|
|
TP-Junior
Registriert seit: Nov 2004
Ort: Esslingen
|
Problem gelöst:
Ein einfacher Redirekt am Ende des Zählskriptes reichte schon aus:
PHP-Code:
header("Location: $audiodatei");
Manchmal denkt man einfach zu kompliziert, habe ich das Gefühl
Trotzdem danke an alle für die Tipps.
|
|
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
Thema durchsuchen |
|
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 07:31 Uhr.
|
 |