Eine Datei über Web-Adresse auf mein FTP speichern?

jackie05

Erfahrenes Mitglied
Hallo,
ich möchte über PHP eine Datei auf meinem FTP laden über eine Web-Adresse.
z.B. soll diese Seite "http://www.testseite.de/test.mp4" die Datei direkt auf meinem FTP speichern.

Hier ist mal ein Upload-Script mit Ajax, diese ich im Netz gefunden hab:
PHP:
<!DOCTYPE html>
<html>
<head>
<script>
function _(el){
    return document.getElementById(el);
}
function uploadFile(){
    var file = _("file1").files[0];
    //alert(file.name+" | "+file.size+" | "+file.type);
    var formdata = new FormData();
    formdata.append("file1", file);
    var ajax = new XMLHttpRequest();
    ajax.upload.addEventListener("progress", progressHandler, false);
    ajax.addEventListener("load", completeHandler, false);
    ajax.addEventListener("error", errorHandler, false);
    ajax.addEventListener("abort", abortHandler, false);
    ajax.open("POST", "upload.php");
    ajax.send(formdata);
}
function progressHandler(event){
    _("loaded_n_total").innerHTML = "Uploaded "+event.loaded+" bytes of "+event.total;
    var percent = (event.loaded / event.total) * 100;
    _("progressBar").value = Math.round(percent);
    _("status").innerHTML = Math.round(percent)+"% uploaded... please wait";
}
function completeHandler(event){
    _("status").innerHTML = event.target.responseText;
    _("progressBar").value = 0;
}
function errorHandler(event){
    _("status").innerHTML = "Upload Failed";
}
function abortHandler(event){
    _("status").innerHTML = "Upload Aborted";
}
</script>
</head>
<body>
<h2>HTML5 File Upload Progress Bar Tutorial</h2>
<form id="upload_form" enctype="multipart/form-data" method="post">
  <input type="file" name="file1" id="file1"><br>
  <input type="button" value="Upload File" onclick="uploadFile()">
  <progress id="progressBar" value="0" max="100" style="width:300px;"></progress>
  <h3 id="status"></h3>
  <p id="loaded_n_total"></p>
</form>
</body>
</html>
PHP:
<?php
$fileName = $_FILES["file1"]["name"]; // The file name
$fileTmpLoc = $_FILES["file1"]["tmp_name"]; // File in the PHP tmp folder
$fileType = $_FILES["file1"]["type"]; // The type of file it is
$fileSize = $_FILES["file1"]["size"]; // File size in bytes
$fileErrorMsg = $_FILES["file1"]["error"]; // 0 for false... and 1 for true
if (!$fileTmpLoc) { // if file not chosen
    echo "ERROR: Please browse for a file before clicking the upload button.";
    exit();
}
if(move_uploaded_file($fileTmpLoc, "$fileName")){
    echo "$fileName upload is complete";
} else {
    echo "move_uploaded_file function failed";
}
?>

wie könnte man das so abändern, das ich statt eine Datei von meinem Computer auswähle, eine Web-Adresse benutzen kann zu der Datei?

Ich wäre euch sehr dankbar, wenn mir jemand erklären könnte, wie man das machen könnte.

Gruss
 
Ungetestet, könnte ich mir vorstellen, dass es durch ersetzen der folgenden Zeile:
<input type="file" name="file1" id="file1">
mit
HTML:
<input type="text" name="file1" id="file1">
funktionieren würde, in dem in diese Zeile die URL der Datei eingetragen wird.

Aber beachte bitte die Urheberrechte der Herausgeber, von diesen geladenen Dateien, sonst kannst du eventuell ziemliche Probleme bekommen.
 
Vielen Dank für die antworten.

Das ist für Privatzwecken, da ich ein Web-Server und ein Root-Server habe und möchte gerne über PHP mit der eindeutigen Zieladresse einer Datei zu diesem Server laden, auf welche ich die PHP ausgeführt habe.

Damit klappt es nicht:
HTML:
<input type="text" name="file1" id="file1">

Wenn ich dann die URL eintrage, dann passiert garnix, wenn ich auf Upload klicke.

Gibt es Vielleicht eine andere möglichkeit?

Gruss
 
Also, eigentlich betreibe ich eine Homepage, indem User Backups auf andere Server erstellen kann usw.

Ich habe ein Script erstellt, indem man nicht den direkte Pfad der Datei sieht sondern gesichert mit PHP das z.B. so aussieht:
http://www.testseite.de/upload/?id=1&file=test
und mit diesem PHP Script wird der Download dann gestartet:
PHP:
<?php
    $filename = $_GET['file'];
    $datei = "files/".$filename.".png";
    $dateiname = basename($datei);
    $groesse = filesize($datei);

    if (isset($filename)) {
        if ($groesse > 0) {
            //echo "Download gestartet!";
            header("Content-Type: application/force-download");
            header("Content-Disposition: attachment; filename=".$dateiname);
            header("Content-Length:".$groesse);
            readfile($datei);
            fclose($datei);
        } else {
            echo "Datei nicht vorhanden!";
        }
    } else {
        echo "Kein download angegeben!";
    }
?>
Das war jetzt nur ein beispiel, wie die Download-URL von mir aussieht, diese ich direkt auf andere FTP speichern möchte, wo ich die PHP ausgeführt habe.

Wie könnte ich jetzt ein Upload-Script schreiben, diese vom Header ausgelesen wird?
Da ich bei der URL keine Dateierweiterung angebe (http://www.testseite.de/upload/?id=1&file=test).

Danke schonmal.

Gruss
 
Also für dein Vorhaben, würde ich dir vorschlagen, dass du am besten den Usern ein Script zur Verfügung stellst, welches die auf ihrem Webserver einrichten und damit leichter einzelne oder mehrere Dateien auswählen können und diese eine nach der anderen zu dir schicken.

Auf einer Gateway-Basis kannst du den Usern gleich über das Script mit anbieten zu sehen, welche Dateien bei dir gesichert sind.

Damit müssen die User keine Adressen eingeben, sondern wählen diese nur in Auflistungen aus.
 
Danke euch.

Ich würde es trotzdem mit Ajax machen, da ich gerne ein ProgressBar anzeigen lassen möchte.

Ich hab das jetzt erstmal so hinbekommen:
PHP:
$url = $_POST['url'];
        $name = "test.png";
        $upload = file_put_contents("uploads/$name",file_get_contents($url));
        if($upload) {
            //echo "";
        } else {
            //echo "";
        }

Nur wie könnte ich da jetzt ein ProgressBar anzeigen?
Da die dateien auch etwas größer sein könnten, möchte ich den Fortschritt anzeigen lassen.

Danke schonmal.

Gruss
 
Also ohne Ajax hätte ich noch paar Ideen, aber mit Ajax kenne ich mich noch nicht so gut aus, daher komm ich nochmal auf das vorhin angesprochene zurück.

Wenn die User eine Seite von dir, bei sich installieren würden, schickst du mit dem Script eine ID mit Parametern von der zu versendenden Dateien und dem Pfad, wenn diese angekommen sind, beginnt automatisch das Script auf deinem Server die Dateien von dem anderen Server zu laden. An Hand der Parameter kannst du Prozentual einen Wert, an das Script beim User zurück senden, welchen du bei folgendem Code auf der User-Seite wieder verwendest.
PHP:
echo '<meter min="0" max="100" value="'.$wert.'"></meter>';
Bei dem Übertragen der Prozente, solltest du noch einen Prüfwert mit senden.
In der Regel verwendet man für OK den Wert 200 und du sendest das dann am besten als folgenden Wert:
Code:
0_0
28_0
45_0
86_0
100_200
Sollte mal doch erst nur 99,9998% gesendet sein, weiß das Script beim User, dass es noch nicht zu 100% gesendet wurde, wenn die 2. Zahl nicht 200 ist.

Dieses Script beim User muss dafür ein Auswahlmenü haben, eine Refresh-Seite mit dem Banken, die sich immer aktualisiert, bis der Ladevorgang beendet wurde und anschließend kehrt es wieder zu dem Auswahlmenü zurück, oder du lieferst den Usern eine Auswertung des Ladevorgangs, auf einer extra Seite.

Sollte die Verbindung des Users zu seinem Server abbrechen, lädt das Script die Dateien trotzdem weiter, aber sollte die Verbindung zwischen den Servern dabei getrennt werden, so wirst du eine nur zum Teil geladene Datei auf deinem Server vorfinden, welche du damit auch von deinen Usern löschen oder überschreiben lassen kannst, ohne dass Sie auf deinen Server gehen müssen.

Bei dem Fehler, solltest du den 2. Teil des Antwort-Codes mit einem als Fehler bekannten Code z.B. 500 ausgeben.
 
Ich danke Dir.

Ich glaube, das ich es trotzdem erstmal so lasse ohne Ajx und bedanke mich trotzdem vielmals für die Mühe und Hilfe.

Gruss
 
Zurück