php – Wie erzwinge ich den Download einer Datei?

Lesezeit: 4 Minuten

Ich möchte unter jedem Video auf einer meiner Websites eine Funktion “Diese Datei herunterladen” hinzufügen. Ich muss den Benutzer zwingen, die Datei herunterzuladen, anstatt nur darauf zu verlinken, da dadurch manchmal eine Datei im Browser abgespielt wird. Das Problem ist, dass die Videodateien auf einem separaten Server gespeichert werden.

Irgendwie kann ich den Download in PHP erzwingen?

  • mögliches Duplikat von Forcing to download a file using PHP

    – bummi

    5. August 2013 um 14:49 Uhr

php Wie erzwinge ich den Download einer Datei
Paolo Bergantino

Du könntest so etwas versuchen:

$file_name="file.avi";
$file_url="http://www.myremoteserver.com/" . $file_name;
header('Content-Type: application/octet-stream');
header("Content-Transfer-Encoding: Binary"); 
header("Content-disposition: attachment; filename=\"".$file_name."\""); 
readfile($file_url);
exit;

Ich habe es gerade getestet und bei mir funktioniert es.

Bitte beachten Sie, dass z readfile Um eine Remote-URL lesen zu können, müssen Sie Ihre haben fopen_wrappers aktiviert.

  • Denken Sie nur daran zu gehen: str_replace(‘”‘, ‘\\”‘, $file_name) bevor Sie es in den Header einfügen

    – Chris KL

    10. Februar 2009 um 7:49 Uhr

  • Der Fehler dabei ist, dass das gesamte Video über seinen Server laufen würde. Wenn sich das Video aus Bandbreitengründen auf einem separaten Server befindet, ist diese Lösung nicht akzeptabel.

    – Zoredache

    10. Februar 2009 um 7:57 Uhr

  • Punkt genommen. Aus dem Klang der Frage habe ich jedoch den Eindruck gewonnen, dass er keinen Zugriff auf diesen Remote-Server hat, sonst wäre es ein triviales Problem. Wenn das der Fall ist, wäre dies meines Wissens die einzige Lösung.

    – Paolo Bergantino

    10. Februar 2009 um 8:18 Uhr

  • Ich denke, dass die Verwendung von readfile die Bandbreite beider Seiten verbraucht. Der Hauptgrund, warum jemand dies tun möchte, ist, etwas Bandbreite zu sparen

    – poya

    13. September 2012 um 1:25 Uhr


  • @Ben Wenn Sie Zugriff auf den Server haben, auf dem sich die Datei befindet, können Sie einfach readfile von ihm statt aus der Ferne, wodurch das Problem der doppelten Bandbreite beseitigt wird.

    – Paolo Bergantino

    7. April 2014 um 18:35 Uhr

1646310248 314 php Wie erzwinge ich den Download einer Datei
Elminson DeOleo Baez

Getestet ist die download.php-Datei

function _Download($f_location, $f_name){
  $file = uniqid() . '.pdf';

  file_put_contents($file,file_get_contents($f_location));

  header('Content-Description: File Transfer');
  header('Content-Type: application/octet-stream');
  header('Content-Length: ' . filesize($file));
  header('Content-Disposition: attachment; filename=" . basename($f_name));

  readfile($file);
}

_Download($_GET["file'], "file.pdf");

und der Link zum Download ist

<a href="download.php?file=http://url/file.pdf"> Descargar </a>

Versuche dies:

<?php
$FileName="/var/ww/file.txt";
header('Content-disposition: attachment; filename="'.$FileName.'"');
readfile($FileName);

Der Schlüssel ist die header(). Sie müssen den Header zusammen mit dem Download senden und erzwingt den Dialog “Datei speichern” im Browser des Benutzers.

<?php
$FileName="/var/ww/file.txt";
header('Content-disposition: attachment; filename="'.$FileName.'"');
readfile($FileName);

mit diesem Code. ist es möglich, den Dateinamen zu speichern, was Sie wollen. zum Beispiel haben Sie eine URL: http://remoteserver.com/file.mp3 Anstelle von “file.mp3” können Sie dieses Skript verwenden, um die Datei als “newname.mp3” herunterzuladen

<?php

    $file_name="video.flv";
    $file_url="http://www.myserver.com/secretfilename.flv";
    header('Content-Type: application/octet-stream');
    header("Content-Transfer-Encoding: Binary"); 
    header("Content-disposition: attachment; filename=\"".$file_name."\""); 
    echo file_get_contents($file_url);
    die;

?>

  • Bitte beschreiben Sie Ihre Lösung genauer.

    – Clemens

    26. September 2017 um 6:00 Uhr

1646310248 40 php Wie erzwinge ich den Download einer Datei
Nisharg Schah

Ich weiß nicht, ob dies der beste Weg ist oder nicht, aber ich mag das, kurz und einfach.

Wenn du möchtest herunterladen Datei bei Ihrem Besuch URLkönnen Sie wie unten tun

<a href="https://stackoverflow.com/questions/531292/resume.pdf" download></a>
<script>document.querySelector('a').click();</script>

  • Bitte beschreiben Sie Ihre Lösung genauer.

    – Clemens

    26. September 2017 um 6:00 Uhr

php Wie erzwinge ich den Download einer Datei
Hugo Senna

index.php

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>download</title>
</head>

<body>
        <a href="https://stackoverflow.com/questions/531292/download.php?file=ID_do_arquivo"> download </a>
</body>
</html>

.htaccess

Options -Indexes
Options +FollowSymlinks
deny from all

download.php

$file = "pdf/teste.pdf";
 if (file_exists($file)) {
    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename=".basename($file));
    header("Content-Transfer-Encoding: binary');
    header('Expires: 0');
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    header('Pragma: public');
    header('Content-Length: ' . filesize($file));
    ob_clean();
    flush();
    readfile($file);
    exit();
}

  • Obwohl Ihr Code großartig aussieht und die Frage höchstwahrscheinlich beantwortet, fügen Sie bitte eine Erklärung hinzu, wie er funktioniert, damit die Leute verstehen, warum er funktioniert.

    – Manchester ohne Marke

    19. Juni 2020 um 22:03 Uhr

923340cookie-checkphp – Wie erzwinge ich den Download einer Datei?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy