Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to force a file to download in PHP

Tags:

html

php

download

I have list of images and I want a "Download" link along with every image so that user can download the image.

so can someone guide me How to Provide Download link for any file in php?

EDIT

I want a download panel to be displayed on clicking the download link I dont want to navigate to image to be displayed on the browser

like image 385
OM The Eternity Avatar asked Aug 13 '10 11:08

OM The Eternity


2 Answers

If you want to force a download, you can use something like the following:

<?php
    // Fetch the file info.
    $filePath = '/path/to/file/on/disk.jpg';

    if(file_exists($filePath)) {
        $fileName = basename($filePath);
        $fileSize = filesize($filePath);

        // Output headers.
        header("Cache-Control: private");
        header("Content-Type: application/stream");
        header("Content-Length: ".$fileSize);
        header("Content-Disposition: attachment; filename=".$fileName);

        // Output file.
        readfile ($filePath);                   
        exit();
    }
    else {
        die('The provided file path is not valid.');
    }
?>

If you simply link to this script using a normal link the file will be downloaded.

Incidentally, the code snippet above needs to be executed at the start of a page (before any headers or HTML output had occurred.) Also take care if you decide to create a function based around this for downloading arbitrary files - you'll need to ensure that you prevent directory traversal (realpath is handy), only permit downloads from within a defined area, etc. if you're accepting input from a $_GET or $_POST.

like image 191
John Parker Avatar answered Nov 05 '22 09:11

John Parker


In HTML5 download attribute of <a> tag can be used:

echo '<a href="path/to/file" download>Download</a>';

This attribute is only used if the href attribute is set.

There are no restrictions on allowed values, and the browser will automatically detect the correct file extension and add it to the file (.img, .pdf, .txt, .html, etc.).

Read more here.

like image 34
debugger Avatar answered Nov 05 '22 07:11

debugger