douba6361
douba6361
2018-01-24 19:38

下载无法按预期工作。 我是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

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

1条回答

  • douji6735 douji6735 3年前

    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.";
        }
    }
    
    点赞 评论 复制链接分享