PHP Header in Kombo mit anderem Skript - Problem

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • PHP Header in Kombo mit anderem Skript - Problem

    Hi,

    jaja "alle Tage wieder ... " oder so ähnlich :)

    Diesmal ist es aber doch ein tiefgreifenderes Problem als üblich.

    Also um mal anzufangen, ich hab auf meiner Seite eine Art Gallerie, da wollte ich das man per Klick auf das Bild selbst es direkt downloaden kann (ohne erst rechte maustaste - speichern unter) zu wählen.

    Das konnte ich mittels eines PHP Headers realisieren den ich per Google mehr oder weniger gefunden und angepasst habe. Dazu wollte ich jeden Klick zählen der auf das Bild gemacht wurde. Auch dazu hab ich ein Script gefunden.

    Allerdings hab ich das Problem das das ganze in Kombination einfach nicht laufen will wenn die Bilder unter 4kb sind und ich weiß ums ********* net wieso das so ist ...

    Aber um mal von der "Theorie" zur "Praxis" zu kommen, poste ich mal die Codes:

    bilder.php (Seite mit den Bildern und den Hyperlinks die darauf verweisen) - Also so sieht ein Link dann bei mir aus :

    Quellcode

    1. <a href="dlcounter/count.php?filename=ebay01&id=ebay01"><img src="pics/ebaypics/ebay01.gif" alt="" border="0"></a>


    Das id=***** spricht das Klick Counter Script an und das filename den Header. Und funktioniert auch bei Bild01 zum Beispiel weil es grösser als 4kb ist.

    count.php - Ist das Scriptfile von dem Counter - In diesem hab ich ganz oben auch den PHP Header reingebastelt. Der wie folgt aussieht :

    PHP-Quellcode

    1. <?php
    2. $id = $_GET['id'];
    3. $filename = $_GET['id'];
    4. $picture_path = "../pics/ebaypics/";
    5. if (isset($filename)) {
    6. $filename = $filename . ".gif";
    7. $filename_compl = $picture_path . $filename;
    8. } else {
    9. echo "Keine Datei angegeben";
    10. EXIT;
    11. }
    12. if (!file_exists($filename_compl)) {
    13. echo "Datei existiert nicht!";
    14. EXIT;
    15. }
    16. if (PMA_USR_BROWSER_AGENT == 'IE') {
    17. header('Content-Disposition: inline; filename="' . $filename . '"');
    18. header('Expires: 0');
    19. header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    20. header('Pragma: public');
    21. } else {
    22. header('Content-Disposition: attachment; filename="' . $filename . '"');
    23. header('Expires: 0');
    24. header('Pragma: no-cache');
    25. }
    26. $filesize = filesize("$filename_compl");
    27. $datei = fopen("$filename_compl", "r");
    28. if($filesize<=0) { $filesize="1048576"; }
    29. $text = fread($datei, $filesize);
    30. echo("$text");
    31. fclose($datei);
    Alles anzeigen


    Direkt darunter kommt dann das eigentliche Count Script:

    PHP-Quellcode

    1. $email="[email protected]";//bitte hier deine email angeben
    2. $domain = ""; //optional deine domain angeben: muss nicht angegeben werden, taucht im "VON" der email auf!
    3. $dauer = 0;//Dauer der Reloadsperre in Minuten
    4. $dl_to_mail = 500; //Anzahl an DL´s, nach denen eine email geschickt werden soll
    5. //und jetzt gehts auch schon los...
    6. $ipdatei = "data/ip.txt";
    7. if (!file_exists($ipdatei))
    8. {
    9. $fd=fopen($ipdatei,"w+");
    10. fclose($fd);
    11. }
    12. $file = file("data/links.txt");
    13. foreach($file as $line)
    14. {
    15. list($id,$url) = explode("|",$line);
    16. $down[$id] = $url;
    17. }
    18. if(empty($_GET['id']))
    19. {
    20. echo "Insert ID!";
    21. }
    22. else
    23. {
    24. if(empty($down[$_GET['id']]))
    25. {
    26. echo "This ID is not used";
    27. }
    28. else
    29. {
    30. $ip = $_SERVER['REMOTE_ADDR']; //IP abfragen
    31. if (($ip == "127.0.0.1") && ($_SERVER['HTTP_X_FORWARDED_FOR'] != ""))
    32. {
    33. $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
    34. }
    35. $url = $down[$_GET['id']];//downloadurl wird zugewiesen
    36. $exists = FALSE;//Marker wird gesetzt
    37. $timestamp = time();//unixtime für IP-Sperre wird ermittelt
    38. $file = file($ipdatei);
    39. $ipdatei = fopen($ipdatei,"w+");
    40. foreach ($file as $line)
    41. {
    42. $exp_line = explode("|", $line);
    43. if (($exp_line[0] == $ip) && ($exp_line[1] == $_GET['id'])) //wenn die Zeile der Schleife die IP beinhaltet
    44. {
    45. $exists = TRUE; //hier wird der marker auf true gesetzt, da die IP schon vorkommt
    46. if(($exp_line[2]+ 60*$dauer) < $timestamp) // IP ist nicht mehr gesperrt
    47. {
    48. fputs($ipdatei, "$exp_line[0]|$exp_line[1]|$timestamp\n"); //neue Daten für diese IP werden geschrieben...
    49. counten($url);//Funktion counten wird aufgerufen und die Downloadurl mitgeliefert
    50. }
    51. else //IP ist noch gesperrt
    52. {
    53. fputs($ipdatei, "$line");
    54. echo "<center><font color = \"red\"><b>Du hast gerade eben das file schon gezogen und bist vorerst für $dauer min gesperrt</b></font></center>";
    55. }
    56. }
    57. else //wenn die Zeile der Schleife die IP nicht beinhaltet...
    58. {
    59. if(($exp_line[2]+ 60*$dauer) > $timestamp) //und noch eine Sperre für diese Zeile existiert...
    60. {
    61. fputs($ipdatei, "$line"); //wird sie nochmal gleich reingeschrieben, ansonsten wird sie gelöscht!
    62. }
    63. }
    64. }
    65. if ($exists == FALSE) //hier wird der oben gesetzte Marker abgefragt, wenn er nicht auf TRUE ist, ist die IP neu und wird eingefügt
    66. {
    67. $id = $_GET['id'];
    68. fputs($ipdatei, "$ip|$id|$timestamp\n"); //neue Zeile für neue IP wird geschrieben
    69. counten($url);//Funktion counten wird aufgerufen und die Downloadurl mitgeliefert
    70. }
    71. fclose($ipdatei);
    72. }
    73. }
    74. function counten($url)
    75. {
    76. global $email, $dl_to_mail,$domain;
    77. Header("Location: ".$url);
    78. header("Expires: Mon, 10 Jan 1970 01:01:01 GMT");
    79. header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
    80. header("Cache-Control: no-store, no-cache, must-revalidate");
    81. header("Pragma: no-cache");
    82. $id=$_GET['id'];//eintrag in counter.txt wird vorbereitet
    83. $date = date("d.m.y");
    84. $time = date("H:i");
    85. $countfile="data/counter.txt";
    86. $treffer=FALSE;
    87. $file = file($countfile);
    88. $fd=fopen($countfile,"w+");
    89. foreach ($file as $line) {
    90. $exp_line = explode("|", $line);
    91. if ($exp_line[0] == $id) {
    92. $count=$exp_line[1];
    93. $count++;
    94. $new_line = "$id|$count|$date|$time\n";
    95. fputs($fd, $new_line);//update alter Eintrag
    96. }
    97. else {
    98. fputs($fd, $line);//update neuer Eintrag
    99. }
    100. }
    101. fclose($fd);
    102. //folgendes nur, wenn du erst nach einigen DLs eine mail haben willst!
    103. if ($dl_to_mail > 1)
    104. {
    105. $maildat = "data/countmail.txt";
    106. $maildattemp = fopen($maildat, "a+");
    107. fwrite($maildattemp, "$id|$date|$time\n");
    108. fclose($maildattemp);
    109. $inhalt = file($maildat,"r");
    110. $anzahl = count($inhalt);
    111. fclose($inhalt);
    112. if ($anzahl >= $dl_to_mail)
    113. {
    114. $maildat = "data/countmail.txt";//hier wird die Datei countmail.txt eingelesen, um die zur email hinzuzufügen
    115. $maildat=file($maildat);
    116. foreach ($maildat as $zeile)
    117. {
    118. $listlines .= $zeile;
    119. }
    120. $header.="From: \"Download-Counter\" $domain\n";
    121. $header.="MIME-Version: 1.0\n";
    122. $header.="Content-Type: text/plain;\n";
    123. $header.="X-Mailer: PHP/".phpversion();
    124. mail("$email", "Downloadcounter", "$date - $time Uhr\n\n Hinweis vom dlcounter-ROBOT: Es wurden seit der letzten Benachrichtigung weitere $dl_to_mail Downloads gezogen\n\nDiese gliedern sich zeitlich wie folgt:\n$listlines","$header");
    125. $maildat = "data/countmail.txt";
    126. $maildattemp=fopen($maildat,"w+");//hier wird die maildat wieder gelöscht!
    127. fputs($maildattemp,"");
    128. fclose($maildattemp);
    129. }
    130. }
    131. //folgendes, wenn du bei jedem DL eine Nachricht haben willst!
    132. else
    133. {
    134. $header.="From: \"Download-Counter\" $domain\n";
    135. $header.="MIME-Version: 1.0\n";
    136. $header.="Content-Type: text/plain;\n";
    137. $header.="X-Mailer: PHP/".phpversion();
    138. mail("$email", "Downloadcounter", "Neuer Download\n\nZeit: $date - $time Uhr\nder Download mit der ID $id wurde runtergeladen","$header");
    139. }
    140. }
    141. ?>
    Alles anzeigen



    So nun ist noch folgendes zu erwähnen - Ich sagte ja oben das beispielsweise das ebay01.gif quasi ebay01 geht (direkt download als auch klick zähler)

    So wenn ich das ganze aber auf ein Bild anwende das kleiner als 4kb ist (Nennen wir es mal ebay05.gif bzw. ebay05), dann geht der Direkt Download nicht (Klick Count aber schon) - Jedenfalls wird dann anstatt das Bild runterzuladen, die PHP Header funktion ausser Kraft gesetzt und das Bild standardmässig angezeigt.

    So wenn ich aber bei der Zeile :

    <a href="dlcounter/count.php?filename=ebay05&id=ebay05"><img src="pics/ebaypics/ebay05.gif" alt="" border="0"></a>

    das "&id=ebay05" rausmache, das für den Klick Counter steht, dann geht plötzlich der direkt download ....


    Hoffe das ganze war jetzt nicht zu verwirrend, falls doch dann fragt.
    Ich komme hier jedenfalls nicht mehr weiter und kann mir das auch nicht erklären ...

    Aber ich bin zuversichtlich das mir einer von euch sagen kann woran das liegt :)

    Natheedo