PHP Header in Kombo mit anderem Skript - Problem

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • 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 :

    Code:
    <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-Code:
    <?php
    $id 
    $_GET['id'];
    $filename $_GET['id'];
    $picture_path "../pics/ebaypics/";
    if (isset(
    $filename)) {
    $filename $filename ".gif";
    $filename_compl $picture_path $filename;
    } else {
    echo 
    "Keine Datei angegeben";
    EXIT;
    }
    if (!
    file_exists($filename_compl)) {
    echo 
    "Datei existiert nicht!";
    EXIT;
    }

    if (
    PMA_USR_BROWSER_AGENT == 'IE') {
    header('Content-Disposition: inline; filename="' $filename '"');
    header('Expires: 0');
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    header('Pragma: public');
    } else {
    header('Content-Disposition: attachment; filename="' $filename '"');
    header('Expires: 0');
    header('Pragma: no-cache');
    }

    $filesize filesize("$filename_compl");
    $datei fopen("$filename_compl""r");
    if(
    $filesize<=0) { $filesize="1048576"; }
    $text fread($datei$filesize);
    echo(
    "$text");
    fclose($datei);
    Direkt darunter kommt dann das eigentliche Count Script:

    PHP-Code:
    $email="administrator@domain.de";//bitte hier deine email angeben
    $domain ""//optional deine domain angeben: muss nicht angegeben werden!
    $dauer 0;//Dauer der Reloadsperre in Minuten
    $dl_to_mail 500//Anzahl an DL´s, nach denen eine email geschickt werden soll

    //und jetzt gehts auch schon los...

    $ipdatei "data/ip.txt";
    if (!
    file_exists($ipdatei))
        {
        
    $fd=fopen($ipdatei,"w+");
        
    fclose($fd);
    }

    $file file("data/links.txt");
    foreach(
    $file as $line
        {
            list(
    $id,$url) = explode("|",$line);
            
    $down[$id] = $url;
        }

    if(empty(
    $_GET['id'])) 
        {
            echo 
    "Insert ID!";
        } 
    else 
        {
            if(empty(
    $down[$_GET['id']])) 
            {
                echo 
    "This ID is not used";
                } 
        else 
            {
            
    $ip $_SERVER['REMOTE_ADDR']; //IP abfragen
            
    if (($ip == "127.0.0.1") && ($_SERVER['HTTP_X_FORWARDED_FOR'] != ""))
                    {
                    
    $ip $_SERVER['HTTP_X_FORWARDED_FOR'];
                    }
            
    $url $down[$_GET['id']];//downloadurl wird zugewiesen
            
    $exists FALSE;//Marker wird gesetzt
            
    $timestamp time();//unixtime für IP-Sperre wird ermittelt
            
    $file file($ipdatei);
            
    $ipdatei fopen($ipdatei,"w+");
            foreach (
    $file as $line
                {
                
    $exp_line explode("|"$line);
                    if ((
    $exp_line[0] == $ip) && ($exp_line[1] == $_GET
    ['id'])) //wenn die Zeile der Schleife die IP beinhaltet
                        
    {
                        
    $exists TRUE//hier wird der marker auf true gesetzt, da die IP schon vorkommt
                        
    if(($exp_line[2]+ 60*$dauer) < $timestamp// IP ist nicht mehr gesperrt
                            
    {
                            
    fputs($ipdatei"$exp_line[0]|$exp_line[1]|$timestamp\n"); 
    //neue Daten für diese IP werden geschrieben...
                            
    counten($url);//Funktion counten 
    wird aufgerufen und die Downloadurl mitgeliefert
                            
    }
                        else 
    //IP ist noch gesperrt
                            
    {
                            
    fputs($ipdatei"$line");
                            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>";
                            }
                        }
                    else 
    //wenn die Zeile der Schleife die IP nicht beinhaltet...
                        
    {
                        if((
    $exp_line[2]+ 60*$dauer) > $timestamp
    //und noch eine Sperre für diese Zeile existiert...
                            
    {
                            
    fputs($ipdatei"$line"); //wird sie nochmal gleich reingeschrieben, 
    ansonsten wird sie gelöscht!
                            }
                        }
                    }
            if (
    $exists == FALSE//hier wird der oben gesetzte 
    Marker abgefragtwenn er nicht auf TRUE istist die IP neu und wird 
    eingefügt
                       
    {
                    
    $id $_GET['id'];
                    
    fputs($ipdatei"$ip|$id|$timestamp\n"); //neue Zeile für neue IP wird geschrieben
                       
    counten($url);//Funktion counten wird aufgerufen und die Downloadurl mitgeliefert
                       
    }
            
    fclose($ipdatei);
            }
        }

    function 
    counten($url)
    {
    global 
    $email$dl_to_mail,$domain;
    Header("Location: ".$url);
    header("Expires: Mon, 10 Jan 1970 01:01:01 GMT");
    header("Last-Modified: " gmdate("D, d M Y H:i:s") . " GMT");
    header("Cache-Control: no-store, no-cache, must-revalidate");
    header("Pragma: no-cache");
    $id=$_GET['id'];//eintrag in counter.txt wird vorbereitet
    $date date("d.m.y");
    $time date("H:i");
    $countfile="data/counter.txt";  
    $treffer=FALSE;  
    $file file($countfile);
    $fd=fopen($countfile,"w+");    
    foreach (
    $file as $line) {
        
    $exp_line explode("|"$line);
            if (
    $exp_line[0] == $id) {
                
    $count=$exp_line[1];
                
    $count++;
                
    $new_line "$id|$count|$date|$time\n";
                      
    fputs($fd$new_line);//update alter Eintrag
            
    }
            else {
                
    fputs($fd$line);//update neuer Eintrag
            
    }
    }
    fclose($fd);
    ?> 

    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
    Zuletzt geändert von Natheedo; 19.12.2005, 00:54.

  • #2
    Kannst du bitte deinen Code da oben so umbrechen, dass man nicht mehr nach rechts scrollen muß? Danke.

    Und vielleicht wäre es auch angebracht, es auf relevante Abschnitte zu verkürzen. Ob das möglich ist, weiß ich jetzt gar nicht, weil ich es mir nicht durchgelesen habe. Aber in der Regel kommen die Antworten bei schneller, wenn man "weniger fragt".

    Kommentar


    • #3
      Hab ihn jetzt weitgehend umgebrochen, alles was noch rechts ist sind die Kommentare ...

      Die "unwichtigen Sachen" hab ich aus dem Code rausgenommen.

      Ok hätte eher an euch denken müssen in der Hinsicht

      Natheedo

      Kommentar


      • #4
        Oweia, wo soll man da nur anfangen. Am besten du wirfst alles weg und beginnst nochmal neu. Diesmal dann aber mit System statt Google.

        Lies über header, passthru und auch die Userkommentare dazu.

        Kommentar


        • #5
          Ist ja nicht so das ich erst seit paar Tagen an dem Ding rummache, hab
          auch ne aktuelle Version, die schön klein sauber, mit nem selbst
          gebastelten Counter ist, allerdings hab ich da auch wiederrum ein kleines Problem.

          Das ist das komplette Script (Header+Counter) :

          PHP-Code:
          <?php
          // config
          $picture_path '../pics/ebaypics/';
          $counter_db 'data/counter.txt';
          $counter_separator '|';

          // init
          $filename =  $_GET['id'] . '.gif';
          $filepath $picture_path $filename;

          if ( !
          file_exists$filepath ) ) {
              die( 
          'Datei existiert nicht!' );
          }

          // counter auslesen
          $counter file$counter_db );
          $hits = array();
          foreach( 
          $counter as $ln ) {
              
          $ln trim$ln );
              if( 
          $ln == '' ) {
                  continue;
              }
              list( 
          $f$h ) = explode$counter_separator$ln );
              
          $hits[$f] = $h;
          }

          // hits aktualisieren
          if( isset( $hits[$filename] ) ) { // eintrag existiert bereits
              
          $hits[$filename]++;
          } else {
              
          $hits[$filename] = 1;
          }

          // counterstand speichern
          $fp fopen$counter_db'w' );
          foreach( 
          $hits as $f => $h ) {
              
          fwrite$fp$f.$counter_separator.$h."\n" );
          }
          fclose$fp );

          // header schicken
          header'Content-Disposition: attachment; filename="' $filename '"' );
          header'Content-Length: ' filesize$filepath ) );

          // content schicken
          readfile$filepath );
          ?>
          Nur bekomme ich es nicht hin, das Ergebniss des Wertes auf der HP
          anzeigen zu lassen, vielleicht kann ich aus Verzweiflung nicht mehr klar denken oder so ... Ich weiß es auch nicht.

          Vorher hab ich :

          <? auslesen("ebay01");?>

          in meine Gallerie Seite einegtragen dann ging das ... Jetzt hab ich kein Plan ...

          Natheedo

          Kommentar

          Lädt...
          X