php: Server-2-Server-Download einer Datei

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Benutzeravatar
Wuppi
Mitglied
Beiträge: 734
Registriert: 14.05.2002 23:04
Wohnort: Köln
Kontaktdaten:

php: Server-2-Server-Download einer Datei

Beitrag von Wuppi »

Hi

ich hab in meiner SQL einen Grafiklink (http) zu einem fremden Server - statt eines Linkes, möchte ich die Grafik aber lokal und mit neuem Dateinamen (auf meinem Server; im Dateisystem - nicht in der DB) verfügbar haben. Ich möchte die Grafik 1:1 übernehmen - egal welches Format, egal welche größe.

Wie stelle ich das an?
fopen ist mir schon klar - nur danach komm ich net weiter (also runterladen und lokal mit neuen Namen abspeichern). Hab mir bei php.net paar Beispiele angeschaut - aber so richtig schlau werde ich daraus net.

Gruß
Benutzeravatar
Frank1604
Ehemaliges Teammitglied
Beiträge: 2106
Registriert: 07.11.2007 09:25
Wohnort: Einhausen
Kontaktdaten:

Re: php: Server-2-Server-Download einer Datei

Beitrag von Frank1604 »

Das ist relativ einfach, schau dir dazu mal file_get_contents und die Beispiele dazu an.
Gruß, Frank
Meine Meinung steht fest. Bitte verwirrt mich nicht mit Tatsachen!
Benutzeravatar
Wuppi
Mitglied
Beiträge: 734
Registriert: 14.05.2002 23:04
Wohnort: Köln
Kontaktdaten:

Re: php: Server-2-Server-Download einer Datei

Beitrag von Wuppi »

Hi

file_gets_contents hatte ich auch schon gesehen. Hier irritierte mich das man mal fopen in den Beispielen nutzt und mal nicht. Aber ich sehe gerade - man sollte auch mal zu ende lesen: ganz unten gehts weiter file_put_contents ... das wäre dann die möglichkeit die runtergeladene Dateien wieder abzuspeichern.

Sinngemäss sähe das dann so aus:

Code: Alles auswählen

<?php
$file = 'http://www.example.com/grafik.jpg';

// Open the file to get existing content
$current = file_get_contents($file);

$saveto = 'h:\\www\script\bilder\123.jpg'; 
// Write the contents back to the file
file_put_contents($saveto, $current);
?>
richtig? (beim saveto-Pfad die richtigkeit der Pfadangabe mal ignorieren - da kämpfe ich unter Windows immer mit *G*)

Gruß
P7BB
Mitglied
Beiträge: 383
Registriert: 15.07.2008 19:40

Re: php: Server-2-Server-Download einer Datei

Beitrag von P7BB »

Solange du keine php-Dateien richtig vom PHP-Quellcode her downloaden willst, kannst du auch copy() nehmen ;) Kopiert den Quelltext der Seite. Also kopiert im Prinzip genau den Code, den du auch direkt beim Aufrufen der Seite sehen würdest, wenn du den Quelltext öffnest :) Wenn du beispielsweise zip-Dateien downloaden willst, müsste das sogar direkt gehen, wenn nicht, dann vermutlich aber mit einem php-script, dass die zip-datei "öffnet" (also den Code, der hinter einem Zip-Ordner steckt) und diesen dann einfach im Klartext ausgibt. Diesen code kannst du dann mit copy() kopieren lassen und die Datei bei dir auf dem Server einfach mit der Endung .zip speichern :)
Benutzeravatar
Wuppi
Mitglied
Beiträge: 734
Registriert: 14.05.2002 23:04
Wohnort: Köln
Kontaktdaten:

Re: php: Server-2-Server-Download einer Datei

Beitrag von Wuppi »

Hi

mir gehts ja um ne Grafik die ich von Server1 per http runterladen möchte und auf Server2 (wo das script laufen wird) im Filesystem ablegen möchte. Quellcode, Text etc. juckt mich net ;)

Gruß
Benutzeravatar
Frank1604
Ehemaliges Teammitglied
Beiträge: 2106
Registriert: 07.11.2007 09:25
Wohnort: Einhausen
Kontaktdaten:

Re: php: Server-2-Server-Download einer Datei

Beitrag von Frank1604 »

Wuppi hat geschrieben:Sinngemäss sähe das dann so aus:

Code: Alles auswählen

    <?php
    $file = 'http://www.example.com/grafik.jpg';

    // Open the file to get existing content
    $current = file_get_contents($file);

    $saveto = 'h:\\www\script\bilder\123.jpg';
    // Write the contents back to the file
    file_put_contents($saveto, $current);
    ?>
richtig? (beim saveto-Pfad die richtigkeit der Pfadangabe mal ignorieren - da kämpfe ich unter Windows immer mit *G*)
Joar, grob überflogen siehts nicht schlecht aus.

So gehts auch..

Code: Alles auswählen

<?php
$getfrom = 'http://www.example.com/grafik.jpg';
$saveto = 'h:\\www\script\bilder\123.jpg';

$erfolg = @file_put_contents($saveto, file_get_contents($getfrom));
echo ($erfolg) ? 'geht' : 'geht net';
?>
Gruß, Frank
Meine Meinung steht fest. Bitte verwirrt mich nicht mit Tatsachen!
P7BB
Mitglied
Beiträge: 383
Registriert: 15.07.2008 19:40

Re: php: Server-2-Server-Download einer Datei

Beitrag von P7BB »

Wuppi hat geschrieben:Hi

mir gehts ja um ne Grafik die ich von Server1 per http runterladen möchte und auf Server2 (wo das script laufen wird) im Filesystem ablegen möchte. Quellcode, Text etc. juckt mich net ;)

Gruß
Ok, probiers so, dürfte "einfacher" sein:

Code: Alles auswählen

copy("http://.../bild.jpg","relativer/pfad/bild.jpg");
Das erste Parameter kann sowohl relativ, als auch absolut sein, das 2. muss aber meines Wissens nach immer Relativ sein ;)

Edit: Um Franks "geht - geht nicht"-Überprüfung noch zu benutzen:

Code: Alles auswählen

$download = copy('http://.../bild.jpg','relativer/pfad/bild.jpg');
echo ($download) ? 'geht' : 'geht nciht';
:) :D
Benutzeravatar
Wuppi
Mitglied
Beiträge: 734
Registriert: 14.05.2002 23:04
Wohnort: Köln
Kontaktdaten:

Re: php: Server-2-Server-Download einer Datei

Beitrag von Wuppi »

Hi

das mit copy gefällt mir auch sehr gut ;) Ich denke mal ich kann da auch variablen einbauen? Das snippet ist ja erst der Anfang - ich lese im Prinzip eine XML-Datei aus (simplexml) und verarbeite die dann - und das ca. 2000mal ;)

Um an die Bild-URL ranzukommen hab ich den Aufruf: $xml->resultat->bild (das XML ist komplett deutsch; also nicht irritieren *G*)
Der Pfad auf meinem Server wird über eine Konfigdatei verfügbar gemacht: $pfad = "h://www/script/bilder/";
Den neuen Dateinamen erstelle ich aus der ID ausm XML: $xml->resultat->id

Somit müsste mein Code so lauten?

Code: Alles auswählen

copy($xml->resultat->bild, $pfad . $xml->resultat->id . ".jpg");
(ggf. müsste ich die Dateiendung von "bild" erfassen und dann statt ".jpg" halt . $erweiterung)

Frage:
echo ($download) ? 'geht' : 'geht nciht';

diesen Aufruf kenn ich gar nicht. Hab den zwar oft im phpbb-Quellcode gesehen (insbesondere das mit ? und : ) , aber verstehen tue ich den nicht. http://php.net/manual/de/function.echo.php hilft mir nicht wirklich weiter :( [mir ist schon klar das ich damit etwas prüfe und dann bei true etwas mache und bei false etwas mache - aber das wars auch schon ...]

Gruß
P7BB
Mitglied
Beiträge: 383
Registriert: 15.07.2008 19:40

Re: php: Server-2-Server-Download einer Datei

Beitrag von P7BB »

Code: Alles auswählen

($bedingung) ? wahr : falsch;
Im Grunde eine verkürzte If-Abfrage. Funktionen liefern allgemein true oder false zurück. Also bekommt die variable $download den Wert true, wenn es funktioniert.
Wenn dann die Bedingung in den Klammern ($download) den Wert true hat (es wird bei der verkürzten if-abfrage nur geprüft, ob es true ist - andere Überprüfungen sind nicht möglich!), dann wird das erste nach dem Fragezeichen ausgeführt. Ansonsten das zweite ;)

wenn du jetzt noch ein "echo" dafür setzt, entscheidest du lediglich, ob jetzt die Ausgabe "geht" oder "geht nicht" erfolgt. ;)
Anders kannst du auch sowas machen:

Code: Alles auswählen

($download) ? $bla = 'geht' : $bla = 'geht nicht';
echo $bla;
oder

Code: Alles auswählen

($download) ? echo 'geht' : echo 'geht nicht';
Zumindest sollte das so Funktionieren, ich kenn die Syntax nur von C++ und dort funktioniert es mit Zuweisungen und sowas ;) :D

Och achja: Ja, du kannst das ganze natürlich auch mit Variablen machen. Aber ich bin mir nicht sicher, ob dein Webserver erlaubt, dass du einen absoluten Pfad (h:/...) angibst... Sofern du das Script lokal laufen lässt, kann es gut sein, dass es geht, aber online gibt es vermutlich mehr Probleme ;) (Zumal online dann auch der entsprechende Pfad definiert sein muss ;))
Benutzeravatar
Frank1604
Ehemaliges Teammitglied
Beiträge: 2106
Registriert: 07.11.2007 09:25
Wohnort: Einhausen
Kontaktdaten:

Re: php: Server-2-Server-Download einer Datei

Beitrag von Frank1604 »

Eigentlich handelt es sich nicht um eine If Else, sondern um den Trinitäts-Operator, einen Vergleichs Operator wie z.B. "==" oder "==="
Gruß, Frank
Meine Meinung steht fest. Bitte verwirrt mich nicht mit Tatsachen!
Antworten

Zurück zu „Coding & Technik“