Jonas
Jonas

Reputation: 82

The download doesn't work as expected. I'm a beginner in php

I have a problem. I made a little download code. All i'm getting is a blank page. Url to download: https://jonasgamertv.com/download.php?file=header.png This is my code:

<?php
if(isset($_REQUEST["file"])){

    // Get parameters
    $images = array("header.png");
    $file = urldecode($_GET["file"]); // Decode URL-encoded string

    if(in_array($file, $images, true)){
        $filepath = "../images/" . $file;

        // Process download
        if(file_exists($filepath)) {
            header('Content-Description: File Transfer');
            header('Content-Type: application/octet-stream');
            header('Content-Disposition: attachment; filename="'.basename($filepath).'"');
            header('Expires: 0');
            header('Cache-Control: must-revalidate');
            header('Pragma: public');
            header('Content-Length: ' . filesize($filepath));
            flush(); // Flush system output buffer
            readfile("$filepath");
            exit;
        }
    }
    else{
        echo "File does not exist.";
    }
}
?>

Thanks for your help and time, Jonas

Upvotes: 0

Views: 52

Answers (1)

sam
sam

Reputation: 2984

Your code runs fine; what I would do is check the path of your ../images folder.

I added a new else clause to tell you if the file does not exist. This will let you know when the file is not found, since your current code just skips that altogether.

<?php
if(isset($_REQUEST["file"])){
    echo 'Loading...';
    // Get parameters
    $images = array("header.png");
    $file = urldecode($_GET["file"]); // Decode URL-encoded string

    if(in_array($file, $images, true)){
        $filepath = "images/" . $file;
        // Process download
        if(file_exists($filepath)) {
            echo 'Preparing download...';
            header('Content-Description: File Transfer');
            header('Content-Type: application/octet-stream');
            header('Content-Disposition: attachment; filename="'.basename($filepath).'"');
            header('Expires: 0');
            header('Cache-Control: must-revalidate');
            header('Pragma: public');
            header('Content-Length: ' . filesize($filepath));
            flush(); // Flush system output buffer
            readfile("$filepath");
        }
        else
        {
            echo 'File does not exist.';
        }
    }
    else{
        echo "Not authorized.";
    }
}

Upvotes: 1

Related Questions