PHP - Download-Proxy

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo,
    ich suche im Netz schon eine Weile, aber ich scheine nicht das richtige zu finden...
    Ich habe ein PHP-Script bekommen, dass mir zu bestimmten Produkten die Downloadlinks der Anleitungen ausspuckt. Diese werden ab und an überarbeitet und bekommen dann auch neue Dateinamen, weshalb die Sache "dynamisch" läuft.
    Dieses kann ich bei mir in meine Seite einbinden, sodass die Links klickbar sind. Das funktioniert bereits schon. Soweit, so gut.

    Jetzt soll es aber so sein, dass es "nach aussen hin" so aussehen soll, als wären die Dateien direkt auf der eigenen Seite.

    Das ganze müsste also irgendwie "ge-proxy-d" werden.
    Ich muss PHP also anweisen, sich die Datei beim Anklicken des "eigenen" Links schnell zu holen und an den Browser des Users zu senden.
    Es geht im Grunde immer nur um ein paar MB, wenn überhaupt...
    Im Endeffekt soll es damit AUCH so aussehen, als wäre der "Content" auf der eigenen Seite.

    Die jetzigen "fremden" Links sehen IMMER so aus:

    http://subdomain.fremdedomain.de/pfad/zur/datei.pdf

    das ganze soll aber so aussehen:

    https://www.eigenedomain.de/pfad/zur/datei.pdf

    datei.pdf könnte also als "Parameter" genommen werden.
    Das "Umschreiben" von http://subdomain.fremdedomain.de/pfad/zur/ nach https://www.eigenedomain.de/pfad/zur/ bekomme ich hin und funktioniert bereits.

    Es müsste also - nach meinem Verständnis - ein zweites Script her, dass beim Klick auf
    https://www.eigenedomain.de/pfad/zur/datei.pdf die Datei bei http://subdomain.fremdedomain.de/pfad/zur/datei.pdf abholt und an den User ausliefert.


    Ich überlege, dieses später noch etwas zu erweitern, indem die bereits geladenen Dateien auf dem eigenen Server gespeichert werden und die ganze Sache dann nur ge-proxy-d wird, wenn die betreffende Datei nicht bereits vorhanden ist, aber das wäre "Zukunftsmusik"

    Wie stell ich das als kompletter PHP-Idiot an?

    EDIT: Tags korrigiert/Lesbarkeit... ***** Wurde Maskiert -> war ne Selbstbeleidigung ;)

    Einmal editiert, zuletzt von Basti_Berlin (16. Februar 2017 um 10:54)

  • Ich helfe dir mal ein wenig auf die Sprünge ;)

    Folgendes Skript sollte eigentlich schon die meiste Arbeit erledigen!
    $url ist wohl selbst erklärend
    $header werden nicht unbedingt benötigt, allerdings könnte man hier ziemlich einfach einen echten Browser imitieren

    [code=php]
    $ch = curl_init();
    curl_setopt($ch,CURLOPT_URL,$url);
    curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
    curl_setopt($ch,CURLOPT_HTTPHEADER, $header);
    $data = curl_exec($ch);
    curl_close($ch);
    [/php]

    Den Output findest du dann in $data

    Das ganze kannst du jetzt als download anbieten.
    z.B. wie hier http://stackoverflow.com/questions/8485…hp-using-header

    u-4

  • Das heißt, ich setze jetzt nur noch die url fest?

    Code
    $ext = $path_parts['extension'];
    $filename = $path_parts['filename'];
    $url = "http://subdomain.domain/pfad/zur/".$filename.$ext;
    $ch = curl_init();
    curl_setopt($ch,CURLOPT_URL,$url);
    curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
    curl_setopt($ch,CURLOPT_HTTPHEADER, $header);
    $data = curl_exec($ch);
    curl_close($ch);

    ???
    Da bekomme ich ne weiße seite (etwas staubig) präsentiert


  • Warum sollte das so aussehen, als wenn die Dateien bei dir liegen, wenn sie dann doch vorher heruntergeladen werden?

    Vielleicht will er 'http' Links durch 'https' ersetzen.

    Das gleiche mache ich auf meiner Website mit Bildern z.B... Alle Bilder von fremden Websites, die kein 'https' haben, werden durch meinen PHP-Proxy befördert und somit ist die ganze Seite auf 'https'

    u-4

  • Vielleicht will er 'http' Links durch 'https' ersetzen.

    Morgen...
    das ist der Hauptgrund.
    Zum anderen liegt der Content nach aussen hin bei mir. Wer weiß, ob es später für ne Suchmaschine besser ist. Schaden dürfte es nicht.
    Das ganze wird auch sowohl für mich - falls ich mal ne Anleitung brauche - einfacher, die schnell zu finden, zum Anderen ist's n netter "Service" dem Kunden ggü.
    und obendrein binde ich 'nem findigen User nicht auf die Nase, wo die Artikel herkommen.


    Ich muss zugeben, dass ich bei PHP noch nicht so ganz durch steige.
    Wenn ich die "Befehle" sehe, kann ich hier und da nachvollziehen, was da passiert. Das ganze zu formulieren ist aber eine ganz andere Geschichte.

    fabio:
    Dein Code gefält mir... Ich probiere den mal noch aus.
    Basierend auf einer Anleitung, wie man erstmal mit PHP den Download startet hab ich das hier "gebastelt":

    PHP
    <?php
    $file = $_GET['download'];
    $baseURL = "http://sub.domain.de/pfad/zur/$file";
    $handle = @fopen("$baseURL", "r");
    header("Content-Type: application/octet-stream");
    header("Content-Disposition: attachment; filename=\"$file\"");
    fpassthru($handle);
    ?>

    Das hat sich mit deinem Post gestern überschnitten und danach war Family dran - sorry für die späte Antwort.

    Der nächste Schritt wäre dann jetzt die .htaccess.
    Damit hab ich gestern auch noch kurz gespielt, aber noch nix fertig bekommen

    Einmal editiert, zuletzt von Basti_Berlin (17. Februar 2017 um 08:55)

  • Ich hab das jetzt mal ungefähr zusammengebastelt..


    ist nicht getestet, aber sollte funktionieren ;)

    Hier das PHP Skript:


    Wenn du jetzt https://deineurl/downlood/datei.pdf aufrufst, geht das automatisch an skript.php mit dem Parameter datei.pdf

    u-4

Jetzt mitmachen!

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