WinFuture-Forum.de: [php] File Von Anderem Server Ziehen - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

[php] File Von Anderem Server Ziehen


#1 Mitglied ist offline   Sin 

  • Gruppe: aktive Mitglieder
  • Beiträge: 414
  • Beigetreten: 13. Mai 04
  • Reputation: 0

geschrieben 19. Juni 2005 - 20:25

Huhu,

hab da ma ne Frage .. kann ich von nem anderen Server per PHP ne File rüberziehen zu mir?

Also sprich mein Server Downloadet von nem anderen.


Irgendsowas wie readfile('www.blablabla.de')
und dann eben speichern im ordner...


Edit.. Mhh .. könnte ja dann eigentlich bei ner Zu großen File starke Probleme mit der maximalen Script Ausführungszeit geben oder?

Da müsste man dann vielleicht mit Resume arbeiten und einem selbstaufruf script?

Dieser Beitrag wurde von Sin bearbeitet: 19. Juni 2005 - 20:28

0

Anzeige



#2 Mitglied ist offline   Floele 

  • Gruppe: aktive Mitglieder
  • Beiträge: 919
  • Beigetreten: 22. Juni 04
  • Reputation: 0

geschrieben 19. Juni 2005 - 21:09

Ja, mit file_get_contents müsste man eine Datei relativ problemlos runterladen können. Wenn die Datei zu groß ist gäbe es noch die Möglichkeit mit ini_set() die Ausführungszeit temporär zu verlängern.
0

#3 Mitglied ist offline   Sin 

  • Gruppe: aktive Mitglieder
  • Beiträge: 414
  • Beigetreten: 13. Mai 04
  • Reputation: 0

geschrieben 19. Juni 2005 - 21:47

und wie würde ich das denn nun speichern als ne z.b. videodatei O_O?
fwrite?
Also z.b.
$ getit = file_get_contents('http://www.blabla.de/bla.avi');
fopen('bla.avi', 'w') //Erstellen der Datei
fwrite('$getit');
fclose('$getit');


so?

Dieser Beitrag wurde von Sin bearbeitet: 19. Juni 2005 - 21:48

0

#4 Mitglied ist offline   andreasm 

  • Gruppe: aktive Mitglieder
  • Beiträge: 707
  • Beigetreten: 19. Juni 05
  • Reputation: 0
  • Wohnort:Saarland
  • Interessen:Elektrotechnik, Elektronik, Programmierung (PHP, MYSQL, Pascal, C++), Energie allgemein, alternative Energiequellen, sonstige Umweltthemen, Digitale Fotografie, Heimwerken, Partys, Fernsehen, .... also von allem etwas :-)

geschrieben 19. Juni 2005 - 22:33

Ich habe mal was geschrieben, vielleicht hilft dir das weiter?

function wwwcopy($file,$nfile)
{
   $fp = @fopen($file,"rb");
   $i=0;
   $propunkt=128*1024;

   while(!feof($fp))
   {
     if (!$fp)
    {
           echo "<p>Datei konnte nicht geöffnet werden. Bitte nochmal versuchen!\n";
         if (file_exists($nfile)) unlink($nfile);
          break;
       	 }

        else

        {

       	 $cont.= @fread($fp,2048);
     	 if (strlen($cont) > $i * $propunkt)
          {
            echo "<font color=blue>*</font>";
          flush();
          $i++;
            }

        }

   }
   fclose($fp);

    if (strlen($cont) > 0)
    {
    $fp2 = @fopen($nfile,"w");
    fwrite($fp2,$cont);
    fclose($fp2);
	}



}


$file ist die fremde Datei und $nfile ist die neue Datei


viel spass
0

#5 Mitglied ist offline   Sin 

  • Gruppe: aktive Mitglieder
  • Beiträge: 414
  • Beigetreten: 13. Mai 04
  • Reputation: 0

geschrieben 20. Juni 2005 - 12:11

Öhm .. könntest du den COde etwas erklären?
Blicke da wirklich kaum durch ;)
$propunkt=128*1024; da fängts schon an .. was is das O_O
0

#6 Mitglied ist offline   Yalamand 

  • Gruppe: aktive Mitglieder
  • Beiträge: 101
  • Beigetreten: 19. Mai 05
  • Reputation: 0

geschrieben 20. Juni 2005 - 13:43

hier mal im schnellformat als funktionierende aber unsichere vorlage. Kann auch sein das es nicht funktioniert wegen der Dateiüberprüfung, habs nicht getestet *g*

<?php
ignore_user_abort(true); // Script weiter ausführen wenn Client abbricht

function download($url, $filename) {
	// Dateiüberprüfung
	if(!is_writeable($filename)) return false; // Kann Datei lokal geschrieben werden
	if(is_dir($filename)) return false; // Ist ein Verzeichnis mit dem Namen vorhanden

	// Sicherheitsüberprüfung
	// TODO: Einfügen, je nach Sicherheitskriterien
	// TODO: Überprüfung mit checkdnsrr() und parse_url() ob gültige $url

	// Allgemeine Einstellungen
	$bufferSize = 8192;	// Buffergröße, nicht zu gross da sonst PHP Heap überlastet wird

	$fOut = @fopen($filename, 'wb+'); // Öffnen der Zieldatei im binären Modus
	$fIn = @fopen($url, 'rb'); // Öffnen der Quelldatei im binären Modus
	// Das @ bedeutet das PHP Fehlermeldungen nicht ausgegeben werden sollen

	if($fOut && fIn) { // Überprüfung ob das öffnen erfolgreich war
  while(!feof($fIn)) { // Laden der fremden Daten und speichern in der Zieldatei
    fwrite($fOut, fread($fIn, $bufferSize)); // Lesen und schreiben der Daten
  }
	} else {
  // Fehlerbehandlung falls Dateien nicht geöffnet werden konnten
	}
	fclose($fIn); // Schliessen der Quelldatei
	fclose($fOut); // Schliessen der Zieldatei
}

download('http://www.hyperionics.com/downloads/d2/HS5Setup.exe', 'test.exe');
?>


Bitte beachten das hier keine 404 Antworten überprüft werden. D.h. es kann auch eine HTML-Datei übermittelt werden.

Dieser Beitrag wurde von Yalamand bearbeitet: 20. Juni 2005 - 14:38

0

#7 Mitglied ist offline   Sin 

  • Gruppe: aktive Mitglieder
  • Beiträge: 414
  • Beigetreten: 13. Mai 04
  • Reputation: 0

geschrieben 20. Juni 2005 - 15:50

Ah .. ;)

Aber beendet sich der DL denn nicht bei dem PHP Timeout?

Also die 20-30 sek ..?
0

#8 Mitglied ist offline   Yalamand 

  • Gruppe: aktive Mitglieder
  • Beiträge: 101
  • Beigetreten: 19. Mai 05
  • Reputation: 0

geschrieben 21. Juni 2005 - 09:09

Zitat (Sin: 20.06.2005, 16:50)

Ah .. :secret:

Aber beendet sich der DL denn nicht bei dem PHP Timeout?

Also die 20-30 sek ..?
<{POST_SNAPBACK}>


natürlich, php muss mit timeouts arbeiten :woot: dieser sollte natürlich wie gewünscht eingestellt werden in der php.ini

Dieser Beitrag wurde von Yalamand bearbeitet: 21. Juni 2005 - 09:10

0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0