php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 19-12-2005, 00:02
Natheedo
 Newbie
Links : Onlinestatus : Natheedo ist offline
Registriert seit: Aug 2005
Beiträge: 54
Natheedo ist zur Zeit noch ein unbeschriebenes Blatt
Standard 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

Geändert von Natheedo (19-12-2005 um 01:54 Uhr)
Mit Zitat antworten
  #2 (permalink)  
Alt 19-12-2005, 01:07
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

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".
Mit Zitat antworten
  #3 (permalink)  
Alt 19-12-2005, 01:20
Natheedo
 Newbie
Links : Onlinestatus : Natheedo ist offline
Registriert seit: Aug 2005
Beiträge: 54
Natheedo ist zur Zeit noch ein unbeschriebenes Blatt
Standard

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
Mit Zitat antworten
  #4 (permalink)  
Alt 19-12-2005, 01:44
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

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.
Mit Zitat antworten
  #5 (permalink)  
Alt 19-12-2005, 01:49
Natheedo
 Newbie
Links : Onlinestatus : Natheedo ist offline
Registriert seit: Aug 2005
Beiträge: 54
Natheedo ist zur Zeit noch ein unbeschriebenes Blatt
Standard

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

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Themen-Optionen
Thema bewerten
Thema bewerten:

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 an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

Die RIGID-FLEX-Technologie
Die RIGID-FLEX-TechnologieDie sogenannte "Flexible Elektronik" , oftmals auch als "Flexible Schaltungen" bezeichnet, ist eine zeitgemäße Technologie zum Montieren von elektronischen Schaltungen.

06.12.2018 | Berni

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni


 

Aktuelle PHP Scripte

WYSIWYG Editor

WYSIWYG Editor zum Einbinden in PHP Scripte.

21.10.2019 Stephan_1972 | Kategorie: PHP/ WYSIWYG
Newsmanager

Der Newsmanager ist ein Newssystem und Newsletter in einem. Mit WYSIWYG Editor und E-Mail import aus einer bestehenden MySql Datenbank sowie dynamische Kategorien / Themen Filter.

11.09.2019 Stephan_1972 | Kategorie: PHP/ News
Modelmanager

Der Modelmanager ist ein Webtool für Fotografen, kann als komplette Homepage oder als Webtool installiert werden.

11.09.2019 Stephan_1972 | Kategorie: PHP/ Webservice
 Alle PHP Scripte anzeigen

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