Bugs, Lob & Kritik zu Winhistory.de alles was mit der Website Winhistory.de zu tun hat

Antwort
 
LinkBack Themen-Optionen
Alt 19.05.2009, 21:24   #21
der Graue
Administrator
 
Benutzerbild von gandro
 
Registriert seit: 12.07.2008
Ort: Schweiz
Beiträge: 2.306
gandro eine Nachricht über ICQ schicken gandro eine Nachricht über MSN schicken gandro eine Nachricht über Jabber schicken
Standard AW: Winhistory.de Downloads reformieren. ideen?

Sooo.. hab nun endlich Zeit gehabt, mal nen Download-Counter zu programmieren:

Kopierst du folgenden Code z.B. nach http://winhistory.de/downloads/ als Datei getfile.php, kannst du die Downloads z.B. über http://winhistory.de/downloads/getfile.php/DOS5.exe verlinken. Ich hab das absichtlich nicht über Parameter implementiert, weil da einige Browser/Downloadmanager dann einen falschen Dateinamen setzen (Ansonsten einfach das Argument von download_file() abändern).

Existiert die Datei http://winhistory.de/downloads/dateien/DOS5.exe, dann zählt er den Counter für die Datei einen hoch und leitet dann den Browser um (geht mit jedem HTTP/1.1-konformen Browser/Downloadmanager/Telnetbenutzer *narf*). Existiert die Datei nicht, zählt er nichts, leitet aber trotzdem weiter (gibt dafür dann die Standard 404 deines Webservers aus).

Die ersten drei Konstanten kannst du evtl. noch anpassen. Wenn du willst, kannst du die counter.txt auch ausserhalb des HTTP-Zugriffes ablegen (einfach Pfad ändern), damit von aussen keiner die Counter lesen kann (kaputt machen kann man damit allerdings eigentlich nichts).

PHP-Code:
<?php
/* Lokaler Pfad in dem nach Dateien gesucht wird */
define("FS_DIR""dateien/");
/* HTTP-Pfad zum obigen Ordner */
define("HTTP_DIR""http://winhistory.de/downloads/dateien/");
/* Counter-Datei für alle Dateien */
define("COUNTER_FILE""counter.txt");

function 
read_counter_file() {
    
$counter_array = array();
    if(
$fp = @fopen(COUNTER_FILE"r")) {
        
flock($fpLOCK_SH);
        while(!
feof($fp)) {
            
$buffer trim(fgets($fp256));
            if(empty(
$buffer)) continue;
            list(
$file$count) = explode('|'$buffer2);
            
$counter_array[$file] = (int) $count;
        }
        
fclose($fp);
    }
    return 
$counter_array;
}

function 
write_counter_file(array $counter_array) {
    if(
$fp = @fopen(COUNTER_FILE"w")) {
        
flock($fpLOCK_EX);
        foreach(
$counter_array as $file => $count) {
            
fwrite($fp$file.'|'.$count.PHP_EOL);
        }
        
fflush($fp);
        
fclose($fp);
        return 
true;
    }
    return 
false;
}

function 
get_counter_for($file) {
    
$counter_array read_counter_file();
    return isset(
$counter_array[$file]) ? 
        
$counter_array[$file] : 0;
}

function 
download_file($requested_file) {

    
/* die Anfrage überprüfen */
    
if(empty($requested_file) || $requested_file == "/") {
        
header("HTTP/1.1 400 Bad Request");
        exit(
"<h1>400 Bad Request</h1>");
    }

    
/* überflüssiges '/' aus dem String entfernen */
    
$requested_file substr($requested_file1);

    
/* wenn die Datei existiert, den Counter hochzählen */
    
if(file_exists(FS_DIR.$requested_file)) {
        
$counter_array read_counter_file();
        if(isset(
$counter_array[$requested_file])) {
            
$counter_array[$requested_file]++;
        } else {
            
$counter_array[$requested_file] = 1;;
        }

        
ignore_user_abort(1);
        
write_counter_file($counter_array);
        
ignore_user_abort(0);
    }

    
header("HTTP/1.1 302 Found");
    
header("Location: ".HTTP_DIR.$requested_file);
    exit();
}

/* überprüfen, ob die Datei inkludiert wurde */
list($main_file) = get_included_files();

/* wenn nicht, dann die Weiterleitung starten */
if($main_file == __FILE__) {
    
$requested_file 
        
str_replace($_SERVER['SCRIPT_NAME'], ""$_SERVER['PHP_SELF']);
    
download_file($requested_file);
}

?>
Ich hoffe, das ganze ist Race-Condition sicher. Ich arbeite zwar mit Dateisperren, aber so ganz trau ich PHP in der Hinsicht nicht. Die Zählerdatei ging bei mir bei ein paar Stress-Tests allerdings nicht in die Brüche.

Natürlich hab ich auch grad eine Programmierschnittstelle eingebaut. Wenn du die Datei nicht via Browser aufrufst, sondern via include() einbindest, kannst du auf die Funktionen zugreifen, ohne dass er weiterleiten will. Beispiel:

PHP-Code:
<?php
include("getfile.php");

/* gibt den Wert des Counter der Datei DOS5.exe zurück */
echo get_counter_for("DOS5.exe");
?>

Geändert von gandro (20.05.2009 um 11:01 Uhr) Grund: Kleiner Schönheitsfehler in write_counter_file()...
gandro ist gerade online   Mit Zitat antworten
Alt 19.05.2009, 21:27   #22
٩(͡๏̯͡๏)۶
 
Benutzerbild von freaked
 
Registriert seit: 12.07.2008
Ort: Wien/AT
Beiträge: 554
freaked eine Nachricht über ICQ schicken freaked eine Nachricht über MSN schicken
Standard AW: Winhistory.de Downloads reformieren. ideen?

hach ich kann mich noch erinnern, da gabs mal wind 1.01 auf bootdisk zum saugen
das war toll
__________________
... und wie ick so aus de kneipe jehe steht die strasse uff und klatscht ma eene!

micha muss gekickt werden .,."!
freaked ist offline   Mit Zitat antworten
Alt 19.05.2009, 23:03   #23
Software Archäologe
WH Admin
 
Benutzerbild von Dirk
 
Registriert seit: 11.07.2008
Ort: Berlin
Beiträge: 3.152
Standard AW: Winhistory.de Downloads reformieren. ideen?

Nein, so was würde es doch nie auf winhistory.de gegeben haben. da musst du dich irren. hab die disketten erst letztlich im keller wiedergefunden.

Ich habe jetzt mal die Updates Seite verbastelt. Etliche Platzhalter, Farben noch nicht endgültig und die Links müssten nicht funktionieren. aber schaut mal ob das technisch geht und was noch fehlen könnte:
Downloads: Updates für Windows

Ist javascript.

@gandro: sieht interessant aus. schaue ich mir mal morgen ein und werde es in die seite einbinden.
Dirk ist offline   Mit Zitat antworten
Alt 19.05.2009, 23:22   #24
der Graue
Administrator
 
Benutzerbild von gandro
 
Registriert seit: 12.07.2008
Ort: Schweiz
Beiträge: 2.306
gandro eine Nachricht über ICQ schicken gandro eine Nachricht über MSN schicken gandro eine Nachricht über Jabber schicken
Standard AW: Winhistory.de Downloads reformieren. ideen?

Hm.. die Updateseite sieht interessant aus, auch von der Auswahl her.

Die Links sind aber kaputt, weil sie zuletzt ein Backslash "\" als Verzeichnistrenner verwenden, was via HTTP nicht geht.
gandro ist gerade online   Mit Zitat antworten
Alt 19.05.2009, 23:25   #25
verheiratet seit 06.12.06
 
Benutzerbild von Randy
 
Registriert seit: 10.07.2008
Ort: United States
Beiträge: 1.654
Randy eine Nachricht über MSN schicken Randy eine Nachricht über Skype™ schicken
Standard AW: Winhistory.de Downloads reformieren. ideen?

Das mit dem Filter ist gut gelöst.
__________________
Randy ist offline   Mit Zitat antworten
Alt 19.05.2009, 23:36   #26
Software Archäologe
WH Admin
 
Benutzerbild von Dirk
 
Registriert seit: 11.07.2008
Ort: Berlin
Beiträge: 3.152
Standard AW: Winhistory.de Downloads reformieren. ideen?

@gandro:
Hab deinen beitrag mal wiederhergestellt. das war jetzt wirklich nen bug. aber ich will ja eh die links in deine variante umbauen.
Dirk ist offline   Mit Zitat antworten
Alt 19.05.2009, 23:55   #27
Mr. Black
 
Registriert seit: 13.07.2008
Ort: Germany
Beiträge: 115
Standard AW: Winhistory.de Downloads reformieren. ideen?

Das Skript ist gut. Wobei ich persönlich lieber etwas mit MySQL bevorzugen würde. Dennoch die Datei variante ist hier völlig ausreichend.
__________________
Mit freundlichen Grüßen,
CHRiSNEW

CHRiSNEW ist offline   Mit Zitat antworten
Alt 19.05.2009, 23:55   #28
der Graue
Administrator
 
Benutzerbild von gandro
 
Registriert seit: 12.07.2008
Ort: Schweiz
Beiträge: 2.306
gandro eine Nachricht über ICQ schicken gandro eine Nachricht über MSN schicken gandro eine Nachricht über Jabber schicken
Standard AW: Winhistory.de Downloads reformieren. ideen?

Achso, okay.

Hab mir vorhin noch den JavaScript-Code angeschaut... naja... derart viel HTML in Javascript-Strings verpackt, brrr... da läufts mir kalt den Rücken runter.

Du kannst via DOM ja HTML-Code generieren oder den bestehenden verändern, da brauchst du den nicht in Strings abpacken. Wobei das auch nur nen haufen Arbeit gibt.

Ich persönlich würde den Code in einzelne DIVs mit ner id="blubb" verpacken und diese dann via JavaScript (und CSS aka "element.style.display = 'none';") ein- und ausblenden. Dann kannst du das sogar so machen, dass Leute ohne Javascript (FFX NoScript oder Leute mit Uraltbrowsern, was grad bei den Updates durchaus ein Szenario ist) trotzdem den Inhalt sehen.

Wobei es auch nicht optimal ist. Am tollsten hier wäre natürlich AJAX, aber das macht nur mit nem Backend Sinn, was du ja nicht hast.
gandro ist gerade online   Mit Zitat antworten
Alt 20.05.2009, 09:39   #29
Software Archäologe
WH Admin
 
Benutzerbild von Dirk
 
Registriert seit: 11.07.2008
Ort: Berlin
Beiträge: 3.152
Standard AW: Winhistory.de Downloads reformieren. ideen?

Hatte mir das mit DOM angeschaut, und fand es irgendwie unhandlich. Das das so sehr nach hack aussieht stört mich mal nicht.

die andere idee finde ich dagegen reizvoller. wobei man heute ohne javascript glaub ich nichts mehr machen kann. Da funkt auch kein Ajax mehr. was ich btw schrecklich finde. zieht gerade alte computer tierisch runter. Polling to death...
Dirk ist offline   Mit Zitat antworten
Alt 20.05.2009, 09:47   #30
TAL
·········T·
Administrator
 
Benutzerbild von TAL
 
Registriert seit: 09.07.2008
Beiträge: 666
TAL eine Nachricht über ICQ schicken TAL eine Nachricht über MSN schicken TAL eine Nachricht über Skype™ schicken TAL eine Nachricht über Jabber schicken
Standard AW: Winhistory.de Downloads reformieren. ideen?

Mir würden da noch Bilder fehlen auf der linken Seite, das ganze schaut etwas "nackt" aus.
__________________
TAL ist offline   Mit Zitat antworten
Antwort

Themen-Optionen

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


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[WH] Ankündigung: Eine Downloads gehen off Dirk Bugs, Lob & Kritik zu Winhistory.de 14 15.04.2010 19:18
Frankreich: Netzsperre für illegale Downloads Randy User-News 23 10.06.2009 20:09
BeOs downloads? Spit sonstige Betriebssysteme 18 02.04.2009 19:03
Ideen für Winhistory Quiz 2.0? Dirk Coding 6 23.12.2008 10:27
Rapidshare Downloads per wget ? Randy Musik, Kino, Zeitschriften, TV und Internet 3 06.10.2008 10:06


Alle Zeitangaben in WEZ +2. Es ist jetzt 19:04 Uhr.