- Ad -
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! Post your PHP questions here!

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.481
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.481
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

MariaDB 5.5 veröffentlicht
MariaDB 5.5 veröffentlichtDie freie MySQL-Alternative MariaDB wurde in der stabilen Version 5.5.23 veröffentlicht und soll einige Verbesserungen gegenüber Oracles Communityversion von MySQL mitbringen.

16.04.2012 | Berni

Deutsche Yii Framework Community
Deutsche Yii Framework CommunitySeit dem 19.03.2012 gibt es für die Yii PHP Framework Community ein deutsches Zuhause.

20.03.2012 | dhcomputer

 

Aktuelle PHP Scripte

E-Mail-Coder Generator ansehen E-Mail-Coder Generator

E-Mail-Coder Generator, komplett in deutscher Sprache. Mit diesem Generator können Sie Ihre E-Mail-Adresse codieren und so gegenüber Spidern schützen.

23.05.2012 fullmedia | Kategorie: PHP/ Mail
EMO Realty Manager ansehen EMO Realty Manager

EMO Realty Manager is a complete realty listing management solution software. It is easily customized to reflect your creativity whether you are starting from scratch or integrating into an existing web site. EMO Realty Manager can be used to promote re

23.05.2012 myrephp | Kategorie: PHP/ Anzeigenmarkt
MatPo Image Hosting Script ansehen MatPo Image Hosting Script

Mit diesem PHP-Script (mini CMS) kann man .jpg, .gif und .png-Dateien auf den Server laden. Bildergröße beim Hochladen änderbar sowie eine Beschreibung zum Bild angegeben werden kann. Damit das Webspace nicht missbraucht werden kann gibt es jetzt auch

23.05.2012 MatPo | Kategorie: PHP/ Bilder
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 16:13 Uhr.