Verzeichnis auf anderem Server 'grabben'?

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.
Antworten
Wissler
Mitglied
Beiträge: 227
Registriert: 27.02.2005 14:24

Verzeichnis auf anderem Server 'grabben'?

Beitrag von Wissler »

Kann ich mit php ein entferntes Verzeichnis 'grabben'?
Wenn ja: wie?

In dem entsprechenden Verzeichnis liegen Bilddateien. Ich möchte den kompletten Inhalt des Verzeichnisses auf meinen Server kopieren.

(Nebenbei bemerkt: ich bin dazu autorisiert. Per Hand ist es mir
zu aufwendig, da es mehrere 100 Bilder sind, die auch noch alle paar
Tage geändert werden).

Danke im Voraus!
Wissler
Mitglied
Beiträge: 227
Registriert: 27.02.2005 14:24

Beitrag von Wissler »

Ich habe einen Ansatz gefunden, den ich noch ausprobieren muss:

Code: Alles auswählen

$externe_datei = "http://fremderserver.de/bild.jpg";

// externe Datei auslesen
$fp=fopen($externe_datei, "r");
$bild = fread($fp, filesize($externe_datei));
fclose($fp);

// Datei erstellen + schreiben
$fp = fopen("bild.jpg", "w");
fwrite($fp, $bild, strlen($bild));
fclose($fp);


/*
Dazu muß aber "fopen wrappers" aktiviert sein.
siehe dazu:
http://de3.php.net/manual/de/function.fopen.php
http://de3.php.net/manual/de/function.readfile.php
*/
Sebastian R.
Mitglied
Beiträge: 328
Registriert: 18.03.2006 23:21
Kontaktdaten:

Beitrag von Sebastian R. »

Du kannst nicht per PHP-Skript andere Dateien von anderen Servern auslesen. Du kannst zwar per Socket-Funktionen mit dem GET-Befehel eine Datei runterladen, aber du kannst nicht einfach per fopen auf die Files zugreifen. Dann könntest du ja auch die config.php auslesen! ;)
Modeinbau, Banner- und Grafik-Design - gegen einen kleinen Aufpreis! Mail: sebastian@rayloaded.de oder per PN

Rayloaded.de - Your programmers heaven.
fanrpg
Mitglied
Beiträge: 2909
Registriert: 13.12.2004 22:41

Beitrag von fanrpg »

Dann könntest du ja auch die config.php auslesen!
Mit den falsche CHMOD (777) und nen paar schlechten PHP und Apache Einstellungen ist das ohne Probleme möglich :wink:
Diezel
Mitglied
Beiträge: 8
Registriert: 11.06.2006 18:46

Beitrag von Diezel »

fanrpg hat geschrieben:
Dann könntest du ja auch die config.php auslesen!
Mit den falsche CHMOD (777) und nen paar schlechten PHP und Apache Einstellungen ist das ohne Probleme möglich :wink:
Ist es nicht. Bevor was vom Server gesendet wird, wird die PHP-Datei in jedem Falle interpretiert. Sprich was du bekommst ist allenfalls ein paar von PHP ausgegebene Daten. Es sei den du stellst deinen Interpreter ab... aber der Fall wäre ja etwas suboptimal.

Ansich ist aber das grabben eines fremden Verzeichnisses keine Thema, sofern man eine Dateiliste besitzt.

Diese Dateiliste könnte man in ein Array schreiben.

$files = array("http://www.example.org/bild1.jpg","http ... /bild3.jpg"...);



Nun könnte man das array durchlaufen und jede Datei laden.
Dazu können wir sehr wohl fopen(); verwenden.
http://php.net/fopen


foreach($files as $externe_datei)
{
// externe Datei auslesen
$fp=fopen($externe_datei, "r");
$bild = fread($fp, filesize($externe_datei));
fclose($fp);

//Dateiname & Pfad
$path = "./neuerordner/";
$filename = basename($externe_datei);

// Datei erstellen + schreiben
$fp = fopen($path.$filename, "w");
fwrite($fp, $bild, strlen($bild));
fclose($fp);
}

So mit richtigem CHMOD sollte es funktionieren.
Hoff ich :D

Hier noch einmal der ganze Code:

Code: Alles auswählen

<?php
echo "Directory Grabber by Diezel :P<p>";
$files = array("http://www.example.org/bild1.jpg","http://www.example.org/bild2.jpg","http://www.example.org/bild3.jpg"...);
foreach($files as $externe_datei)
{
echo "Downloading ".$externe_datei."<br>";
// externe Datei auslesen 
$fp=fopen($externe_datei, "r"); 
$bild = fread($fp, filesize($externe_datei)); 
fclose($fp); 

//Dateiname & Pfad
$path = "./neuerordner/";
$filename = basename($externe_datei);

// Datei erstellen + schreiben 
$fp = fopen($path.$filename, "w"); 
fwrite($fp, $bild, strlen($bild)); 
fclose($fp); 
}
echo "Operation finished.";
?>
Ich hoffe das funktioniert...
Wenn ja viel spass ;)

gruß,
DIEZEL
Antworten

Zurück zu „Coding & Technik“