douba6361 2018-01-24 11:38
浏览 52
已采纳

下载无法按预期工作。 我是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 2018-01-24 11:51
    关注

    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.";
        }
    }
    

    展开全部

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
编辑
预览

报告相同问题?

手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部