Seite 3 von 3 ErsteErste 123
Ergebnis 31 bis 39 von 39

Thema: mod_xsendfile

  1. #31
    Kunde
    Registriert seit
    17.05.2015
    Beiträge
    10

    AW: mod_xsendfile

    Ach naja... vielleicht ist es eine Überlegung wert, doch ein paar Euro mehr auszugeben oder anderweitig Aufwand zu betreiben.

    Hier die paar Zeilen für die Symlinks.
    Szenario: Ich liefere eine Datei aus, die in einem speziellen Verzeichnis liegt. /downloads/MD5-Hash/MD5-Hash.mp3
    1. Wenn es das Verzeichnis noch nicht gibt
    2. lege es an und vergebe dann
    3. womöglich überflüssigerweise noch einmal extra die Rechte
    4. kreiere einen Symlink zu einer real existierenden Datei im soeben erstellten Verzeichnis
    (5. speichere Pfad und Datei ab)

    Symlink anlegen:

    if (!is_dir($_SERVER['DOCUMENT_ROOT']."/download/".$_GET['item']))
    {
    mkdir($_SERVER['DOCUMENT_ROOT']."/download/".$file, 0755);
    chmod($_SERVER['DOCUMENT_ROOT']."/download/".$file."/.", 0755);
    symlink($_SERVER['DOCUMENT_ROOT']."/QUELLverzeichnis/".$downloadfile, $_SERVER['DOCUMENT_ROOT']."/SYMLINKverzeichnis/".$file. "/" . $file.".mp3");
    }

    Der tatsächliche Dateiname, der im "download speichern"-Dialog auftaucht, wird per header festgelegt.

    header("Content-Description: File Transfer");
    header('Content-Length: '.filesize($_SERVER['DOCUMENT_ROOT']."/audio_download/".$downloadfile));
    header('Location: '."/download/".$item. "/" . $item.".mp3");
    exit;

    GC ungefähr so (liegt in der "dlownload-Root, einfach per http-Cronjob aufrufen"):

    function rrmdir($dir) {
    if (is_dir($dir)) {
    echo $dir . " is a directory.<br />";
    $objects = scandir($dir);
    foreach ($objects as $object) {

    if (filemtime($object) < (time() - (60*60))) {
    if ($object != "." && $object != ".." && $object != "index.php") {
    if (filetype($dir."/".$object) == "dir")
    {
    rrmdir($dir."/".$object);
    echo "removed" . $dir."/".$object . "<br />";
    }
    else
    {
    unlink($dir."/".$object);
    echo "unlinked " . $dir."/".$object . "<br />";
    }
    }
    }
    }
    reset($objects);
    rmdir($dir);
    echo $dir . " removed <br />";
    }
    }

    rrmdir('.');

    Das alles ist natürlich extrem anpassungs- und verbesserungsbedürftig. Plausibilitätsprüfungen sind entfernt und der Code ist massiv reduziert. Bei stackoverflow und Konsorten findest Du aber sicher weitere Inspirationen. Lukas, wie sieht's bei Dir aus? Hast Du evtl. Besseres zu bieten? Aber bitte keine Code-Diskussion.

  2. #32
    Kunde
    Registriert seit
    08.09.2005
    Beiträge
    777

    AW: mod_xsendfile

    Wie gesagt: Bevor ich jetzt meine Backups durchwühle schreibe ich grade mal neu. Wenn du dich/ihr euch bis morgen früh oder mittag gedulden kommt, dann werde ich wohl auch direkt ein Github-Repo auf machen.

  3. #33
    Kunde Avatar von Babelfisch
    Registriert seit
    25.03.2007
    Beiträge
    77

    AW: mod_xsendfile

    Das eigentliche Problem ist es ja aber, das auch noch in WooCommerce zu bekommen. Das geht zwar mit dem Hook woocommerce_download_product aber da muss man schon einigen zusätzlichen Aufwand betreiben, um die sonstige WC-Funktionalität nachzubilden. Der Hook ist nämlich eigentlich zu zeitig…

    Mir fehlt momentan auch ein wenig der Wille, da es ja eben eine elegante Lösung mit X-Sendfile gibt. Hallo df!?

  4. #34
    Kunde
    Registriert seit
    17.05.2015
    Beiträge
    10

    AW: mod_xsendfile

    Kleiner Reminder: Die Lösung ist für Dich und ein paar andere elegant, aber nicht für DF. Siehe zweiten Post in diesem Thread. Dazu gibt es keinen neuen Sachstand.
    Falls Du Dich tatsächlich hinsetzt und was schreibst (WP-Developer-Kenntnisse vorausgesetzt), könntest Du dann auch ein Plugin draus machen? Damit würdest Du reich und berühmt
    Wobei, ohne das Berühmt. Und reich ja eigentlich auch nicht. Aber trotzdem!

  5. #35
    Kunde
    Registriert seit
    08.09.2005
    Beiträge
    777

    AW: mod_xsendfile

    Zitat Zitat von sinnlose_anmeldung Beitrag anzeigen
    Kleiner Reminder: Die Lösung ist für Dich und ein paar andere elegant, aber nicht für DF. Siehe zweiten Post in diesem Thread. Dazu gibt es keinen neuen Sachstand.
    Falls Du Dich tatsächlich hinsetzt und was schreibst (WP-Developer-Kenntnisse vorausgesetzt), könntest Du dann auch ein Plugin draus machen? Damit würdest Du reich und berühmt
    Wobei, ohne das Berühmt. Und reich ja eigentlich auch nicht. Aber trotzdem!
    Ich bin grade dran und werde es dann auch als WP-Plugin umsetzen. Ohne irgendwelche spezielle Hooks.
    Damit dürfte es keine Probleme mit den vorheringen WooCommerce-Verarbeitungen geben, es sollte updatesicher sein und eigentlich für alle Wordpress-Teile tun die X-Sendfile einsetzen.

  6. #36
    Kunde
    Registriert seit
    08.09.2005
    Beiträge
    777

    AW: mod_xsendfile

    Hallo zusammen,

    ich habe jetzt eine erste Version hier, die ich sogar schon als "Beta" bezeichnen würde.
    Installiert wird sie wie jedes Wordpress-Plugin. Aktuell rennt der GBC jede Stunde als Wordpress-Cron und die Symlinks werden nach einer Stunde gelöscht.
    Zumindest die Haltbarkeit und der Ort der Symlinks (Unterhalb von "wp-content") ist über wp-admin/options.php einstellbar. Eine Oberfläche gibt's noch nicht.
    Das sind dann die Optionen "simulatesendfile_expire" und "simulatesendfile_dir".

    WooCommerce hat allerdings noch ein Problem: Wenn das Modul im Apache nicht existiert, dann gibt's ein Fallback auf die reine PHP-Variante.
    Lässt sich aber schnell patchen. Das ist die Funktion "download_file_xsendfile" in "wp-content\plugins\woocommerce\includes\class-wc-download-handler.php".
    Da werde ich mal schauen wie da die Möglichkeiten sind das noch auszutricksen. Ticket an WooCommerce für einen Hook oder so geht heute abend noch raus.

    Ansonsten: Getestet habe ich jetzt zum Großteil unter Windows, beim Test auf einem Linux-System aber auch keine Probleme festgestellt.
    Viel Spaß beim Testen: https://github.com/muellerlukas/simu...file_wordpress

  7. #37
    Kunde
    Registriert seit
    08.09.2005
    Beiträge
    777

    AW: mod_xsendfile

    Wenn ihr in eure functions.php vom Template nun ein
    require 'wp-content/plugins/simulatesendfile/dirtyhacks.php';
    einfügt funktioniert das nun auch ohne Fummelei im WooCommerce-Quelltext.

    Ich erläutere mal kurz die generelle Funktionsweise:
    Die entsprechende Klasse registriert eine PHP-Shutdown-Funktion. Die liest die zu sendenden Header aus.
    Falls darunter ein X-Sendfile ist wird ein Ordner mit einem Zufallshash generiert. Darin liegt ein Symlink mit dem Dateinamen auf die eigentliche Datei.
    Die Funktion entfernt nun die Sendfile-Header und leitet auf den Symlink weiter.
    Der GBC wird vom Wordpress-Plugin in Wordpress registriert sodass der entsprechend über die Wordpress-Cronjobs läuft um die alten Symlinks + Verzeichnise aufzuräumen.
    Die Datei "dirtyhacks.php" definiert die Funktion apache_get_modules() und gaukelt ein installiertes XSendfiles-Modul vor. Damit glaubt auch WooCommerce das und fällt nicht auf die PHP-Variante zurück.
    Die Integration ins Template ist notwendig damit die Funktion global zur Verfügung steht.
    Da die Funktion eigentlich auch nur greift wenn die Bearbeitung von WooCommerce schon durch ist bleiben auch alle WooCommerce-Funktionen wie der Counter oder eben die Berechtigungsprüfung verfügbar.

    Der Browser zeigt die Dateien aktuell allerdings an anstatt direkt den Download zu erzwingen. Das sollte sich aber durch einen Eintrag in der .htaccess auch easy regeln lassen.

  8. #38
    Communityservice Avatar von Nils Dornblut
    Registriert seit
    15.10.2000
    Beiträge
    42.236

    AW: mod_xsendfile

    Hallo zusammen,

    wir haben die Integration von mod_xsendfile intern zur Prüfung notiert. Wenn es Neuigkeiten gibt, melden wir uns.

    Mit freundlichen Grüßen

    Nils Dornblut
    Communityservice
    __________________
    Blog - Facebook - Twitter
    Communitybetreiber: domainfactory GmbH
    Impressum / Pflichtangaben

  9. #39
    Kunde
    Registriert seit
    17.05.2015
    Beiträge
    10

    AW: mod_xsendfile

    Wow. Das hebt das ganze auf ein völlig neues Level

    (Sorry.)

Seite 3 von 3 ErsteErste 123

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •