386 Stimmen

Datei von URL auf Server herunterladen

Nun, diese Aufgabe scheint recht einfach zu sein, und das ist sie auch. Alles, was Sie tun müssen, um eine Datei auf Ihren Server herunterzuladen, ist:

file_put_contents("Tmpfile.zip", file_get_contents("http://someurl/file.zip"));

Es gibt nur ein Problem. Was ist, wenn Sie eine große Datei haben, etwa 100 MB. Dann geht Ihnen der Speicher aus, und Sie können die Datei nicht mehr herunterladen.

Was ich möchte, ist eine Möglichkeit, die Datei beim Herunterladen auf die Festplatte zu schreiben. Auf diese Weise kann ich größere Dateien herunterladen, ohne Speicherprobleme zu bekommen.

18voto

Dimmy Punkte 209
set_time_limit(0); 
$file = file_get_contents('path of your file');
file_put_contents('file.ext', $file);

12voto

Pradeep Kumar Punkte 3825

Verwenden Sie eine einfache Methode in php copy()

copy($source_url, $local_path_with_file_name);

Hinweis: Wenn die Zieldatei bereits existiert, wird sie überschrieben.

PHP-Funktion copy()

Hinweis: Sie müssen für den Zielordner die Berechtigung 777 festlegen. Verwenden Sie diese Methode, wenn Sie auf Ihren lokalen Computer herunterladen.

Besondere Anmerkung: 777 ist eine Berechtigung in Unix-basierten Systemen mit voller Lese-, Schreib- und Ausführungsberechtigung für Eigentümer, Gruppe und jeden. Im Allgemeinen geben wir diese Berechtigung für Assets, die nicht unbedingt vor der Öffentlichkeit auf einem Webserver versteckt werden müssen. Beispiel: Bilder-Ordner.

9voto

Hoan Huynh Punkte 344

Es gibt 3 Möglichkeiten:

  1. file_get_contents und file_put_contents
  2. CURL
  3. fopen

Sie können Beispiele finden von hier .

5voto

Hoàng Vũ Tgtt Punkte 1517

Ich verwende dies zum Herunterladen von Dateien

function cURLcheckBasicFunctions()
{
  if( !function_exists("curl_init") &&
      !function_exists("curl_setopt") &&
      !function_exists("curl_exec") &&
      !function_exists("curl_close") ) return false;
  else return true;
}

/*
 * Returns string status information.
 * Can be changed to int or bool return types.
 */
function cURLdownload($url, $file)
{
  if( !cURLcheckBasicFunctions() ) return "UNAVAILABLE: cURL Basic Functions";
  $ch = curl_init();
  if($ch)
  {

    $fp = fopen($file, "w");
    if($fp)
    {
      if( !curl_setopt($ch, CURLOPT_URL, $url) )
      {
        fclose($fp); // to match fopen()
        curl_close($ch); // to match curl_init()
        return "FAIL: curl_setopt(CURLOPT_URL)";
      }
      if ((!ini_get('open_basedir') && !ini_get('safe_mode')) || $redirects < 1) {
        curl_setopt($ch, CURLOPT_USERAGENT, '"Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.11) Gecko/20071204 Ubuntu/7.10 (gutsy) Firefox/2.0.0.11');
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        //curl_setopt($ch, CURLOPT_REFERER, 'http://domain.com/');
        if( !curl_setopt($ch, CURLOPT_HEADER, $curlopt_header)) return "FAIL: curl_setopt(CURLOPT_HEADER)";
        if( !curl_setopt($ch, CURLOPT_FOLLOWLOCATION, $redirects > 0)) return "FAIL: curl_setopt(CURLOPT_FOLLOWLOCATION)";
        if( !curl_setopt($ch, CURLOPT_FILE, $fp) ) return "FAIL: curl_setopt(CURLOPT_FILE)";
        if( !curl_setopt($ch, CURLOPT_MAXREDIRS, $redirects) ) return "FAIL: curl_setopt(CURLOPT_MAXREDIRS)";

        return curl_exec($ch);
    } else {
        curl_setopt($ch, CURLOPT_USERAGENT, '"Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.11) Gecko/20071204 Ubuntu/7.10 (gutsy) Firefox/2.0.0.11');
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        //curl_setopt($ch, CURLOPT_REFERER, 'http://domain.com/');
        if( !curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false)) return "FAIL: curl_setopt(CURLOPT_FOLLOWLOCATION)";
        if( !curl_setopt($ch, CURLOPT_FILE, $fp) ) return "FAIL: curl_setopt(CURLOPT_FILE)";
        if( !curl_setopt($ch, CURLOPT_HEADER, true)) return "FAIL: curl_setopt(CURLOPT_HEADER)";
        if( !curl_setopt($ch, CURLOPT_RETURNTRANSFER, true)) return "FAIL: curl_setopt(CURLOPT_RETURNTRANSFER)";
        if( !curl_setopt($ch, CURLOPT_FORBID_REUSE, false)) return "FAIL: curl_setopt(CURLOPT_FORBID_REUSE)";
        curl_setopt($ch, CURLOPT_USERAGENT, '"Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.11) Gecko/20071204 Ubuntu/7.10 (gutsy) Firefox/2.0.0.11');
    }
      // if( !curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true) ) return "FAIL: curl_setopt(CURLOPT_FOLLOWLOCATION)";
      // if( !curl_setopt($ch, CURLOPT_FILE, $fp) ) return "FAIL: curl_setopt(CURLOPT_FILE)";
      // if( !curl_setopt($ch, CURLOPT_HEADER, 0) ) return "FAIL: curl_setopt(CURLOPT_HEADER)";
      if( !curl_exec($ch) ) return "FAIL: curl_exec()";
      curl_close($ch);
      fclose($fp);
      return "SUCCESS: $file [$url]";
    }
    else return "FAIL: fopen()";
  }
  else return "FAIL: curl_init()";
}

4voto

Eric Leroy Punkte 1802

Eine PHP 4 & 5 Lösung:

readfile() selbst bei der Übertragung großer Dateien keine Probleme mit dem Speicherplatz. Eine URL kann mit dieser Funktion als Dateiname verwendet werden, wenn die fopen-Wrapper aktiviert wurden.

http://php.net/manual/en/function.readfile.php

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X