PHP - Download-Proxy

  • 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 ;)

  • Da liegt leider der Hund begraben...


    Ich war bei curl und fopen schon angekommen.
    Leider bin ich zu doof, damit ein script zu basteln.

  • 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/quest…oad-with-php-using-header

  • 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

  • Probier mal so:


    (den Dateinamen als Parameter 'skript.php?file=data.pdf' anfügen..


    [code=php]



    $file = $_GET["file"];


    $url = "http://subdomain.domain/pfad/zur/".$file;


    $ch = curl_init();
    curl_setopt($ch,CURLOPT_URL, $url);
    curl_setopt($ch,CURLOPT_RETURNTRANSFER, true);


    $data = curl_exec($ch);
    curl_close($ch);


    echo $data;


    [/php]


    Das sollte dir zumindest mal den Inhalt anzeigen ;)

  • 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

  • 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