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

    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
    <?php
    include("getfile.php");
    
    
    /* gibt den Wert des Counter der Datei DOS5.exe zurück */
    echo get_counter_for("DOS5.exe");
    ?>

    Einmal editiert, zuletzt von gandro (20. Mai 2009 um 11:01)

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

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

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

  • Das stimmt, aber mir ist da nichts sinnvolles zu eingefallen. nen ie logo und sonst überall eine diskette mit nen roten kreuz drauf ist auch nicht zielförderlich.

    die meisten downloadseiten machen die seite auch erst durch werbung bunt. ;)

  • Zitat von CHRiSNEW

    Das Skript ist gut. Wobei ich persönlich lieber etwas mit MySQL bevorzugen würde. Dennoch die Datei variante ist hier völlig ausreichend.


    Ach.. du beziehst das auf mein Script. Ich hab das erst jetzt kapiert. Dachte du redest über Dirks Javascript und da hat mich das MySQL verwirrt.

    Naja, ich persönlich mag Datenbanken nicht so, die machen vieles nur komplexer. Klar, würde MySQL einige Probleme lösen, aber der Overhead wäre gewaltig. Wenn, dann hätte ich auf SQLite gesetzt, macht bei kleinen Datenstrukturen mehr Sinn. Aber das ist erst mit PHP 5.3 dann direkt in der PHP-Distribution drin, vorher lass ich davon noch die Finger.

    Am liebsten wär plattformunabhängies Shared-Memory für PHP (shm_* gibts ja nur für *NIX). Damit man Datenstrukturen über mehrere Scripte hinweg ins RAM ablegen könnte. Ist zwar auch definitiv nicht sorgenfrei, aber wär mir lieber als Datenbanken, die am Ende nur Komplexität verstecken. Zwar wird das Dateisystem meine counter.txt sicherlich auch im RAM zwischenlagern, aber schön ist das nicht.

  • Habe Probleme mit dem Skript:

    Zitat

    Fatal error: Cannot redeclare read_counter_file() (previously declared in /is/htdocs/wp1034963_9GP37ZO4R6/www/downloads/getup.php:10) in /is/htdocs/wp1034963_9GP37ZO4R6/www/downloads/getup.php on line 22



    Update:, das war doof von mir. Aber es läuft jetzt, kann aber kein Zählen feststellen.

    Wüsste auch nicht wo die Textdatei auf meinen Server sein sollte? Was hab ich falsch gemacht?

  • Sorry, hab erst jetzt Zeit zu antworten.

    Ehm... eigentlich müsste das Script eine counter.txt anlegen, und zwar im Arbeitsverzeichnis (bei dir höchstwahrscheinlich /www/downloads/counter.txt). Ich unterdrücke beim Lesen und Schreiben allerdings die Fehlermeldungen. Meine Vermutung ist, dass das Script keine Rechte zum Schreiben bzw. Anlegen einer Datei hat.

    Überprüf mal die Ordnerrechte von /www/downloads.

  • Spoiler anzeigen

    Also wenn "downloads" schon 777 hat, dann müsste es eigentlich schon gehen. Datei selber anlegen hilft selten, im Gegenteil, wenn die falsche Rechte hat, geht gar nichts mehr. Wenn er sie selber anlegt, kann er idR auch reinschreiben.

    Hm.. dann muss da wohl etwas Debugging ran. Ich hoffe die php.ini bei dem Hoster zeigt Fehler bei PHP an. Ansonsten mach folgende beiden Befehle an den Anfang:

    ini_set("display_errors", true);
    error_reporting(E_ALL);

    Dann nimm mal das @ vor fopen() in der write_counter_file() raus und kommentier folgende beiden Zeilen in der Funktion download() aus:

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

    Dann solltest du eine Fehlermeldung sehen.

    Nachtrag:
    Okay, dieser Beitrag hier ist in diesem Falle überflüssig :D

    Nachtrag 2:
    Ach, wie ich sehe hast du das jetzt doch mit DIVs gemacht. Gefällt mir :D

    Einmal editiert, zuletzt von gandro (20. Mai 2009 um 17:37)

  • Ja, obwohls noch nen bissel mehr die datei aufgeblasen hat. die idee das es auch ohne script etwas zu sehen geben sollte, fand ich gut.

    Btw ist jetzt die Seite freigeschaltet und sie darf benutzt werden. einige dateien sind zusätztlich dazugekommen. wenn jemand noch nen must-have kennt, bitte melden.

  • ich hab irgendwie gerade ewig gebraucht, bis ich gemerkt hab, dass die OSs zeilenweise geordnet sind, hatte mich gewundert, dass NT3.51 in ner ganz anderen Spalte ist als NT3.5
    vll bin ich da auch der einzige, aber ich fänds spaltenweise (oder vll irgendwie ganz anders) sinnvoller

  • oreissigs idee ist schon umgesetzt. direct x und mediaplayer wären wirklich nicht verkehrt.

    8.0a ist die letzte für win 95?? 9,0c aus dezember 06 die letzte für 98/me.
    nach mplayer muss ich erst rescherschieren.

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!