SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



CronJob-Service    
bei SELFPHP mit ...



 + minütlichen Aufrufen
 + eigenem Crontab Eintrag
 + unbegrenzten CronJobs
 + Statistiken
 + Beispielaufrufen
 + Control-Bereich

Führen Sie mit den CronJobs von SELFPHP zeitgesteuert Programme auf Ihrem Server aus. Weitere Infos



:: Buchempfehlung ::

TYPO3 Kochbuch

TYPO3 Kochbuch zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > SELFPHP > PHP für Fortgeschrittene und Experten

PHP für Fortgeschrittene und Experten Fortgeschrittene und Experten können hier über ihre Probleme und Bedenken talken

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 19.12.2005, 00:40:21
Natheedo Natheedo ist offline
Anfänger
 
Registriert seit: Apr 2002
Beiträge: 46
PHP Header in Kombo mit anderem Skript - Problem

Hi,

Hab hier ein tiefgreifenderes und wirklich seltsames Problem.

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, taucht im "VON" der email auf!
$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 abgefragt, wenn er nicht auf TRUE ist, ist 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);
//folgendes nur, wenn du erst nach einigen DLs eine mail haben willst!
if ($dl_to_mail 1)
    {
    
$maildat "data/countmail.txt";
    
$maildattemp fopen($maildat"a+");
        
fwrite($maildattemp"$id|$date|$time\n");
        
fclose($maildattemp);
        
$inhalt file($maildat,"r"); 
        
$anzahl count($inhalt);
        
fclose($inhalt);
    if (
$anzahl >= $dl_to_mail)
        {
        
$maildat "data/countmail.txt";//hier wird die Datei countmail.txt eingelesen, um die zur email hinzuzufügen
        
$maildat=file($maildat); 
        foreach (
$maildat as $zeile
           { 
          
$listlines .= $zeile
           }
        
$header.="From: \"Download-Counter\" $domain\n";
        
$header.="MIME-Version: 1.0\n";
        
$header.="Content-Type: text/plain;\n";
        
$header.="X-Mailer: PHP/".phpversion();
        
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");
        
$maildat "data/countmail.txt";
        
$maildattemp=fopen($maildat,"w+");//hier wird die maildat wieder gelöscht!
        
fputs($maildattemp,"");
        
fclose($maildattemp);
        }
    }
//folgendes, wenn du bei jedem DL eine Nachricht haben willst!
else
{
$header.="From: \"Download-Counter\" $domain\n";
$header.="MIME-Version: 1.0\n";
$header.="Content-Type: text/plain;\n";
$header.="X-Mailer: PHP/".phpversion();
mail("$email""Downloadcounter""Neuer Download\n\nZeit: $date - $time Uhr\nder Download mit der ID $id wurde runtergeladen","$header");
}
}
?> 

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
Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Problem mit Header Fabian85 PHP für Fortgeschrittene und Experten 7 16.03.2005 02:06:49
MSSQL & PHP -> nvarchar Problem (meine Lösung) RDJ PHP für Fortgeschrittene und Experten 0 07.06.2004 16:11:39
problem mit php installation claudia2 PHP Grundlagen 2 18.05.2004 14:49:52
Mit ein php skript ein php skript ändern. Siri PHP Grundlagen 2 01.11.2003 20:07:51
Problem mit einem Skript... Gevaddertod PHP für Fortgeschrittene und Experten 3 22.05.2003 11:22:36


Alle Zeitangaben in WEZ +2. Es ist jetzt 12:28:49 Uhr.


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.


© 2001-2020 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt