将PHP生成的文件链接更改为可下载的单击

时间:2013-06-12 11:13:41

标签: php file download

我一直在寻找解决我的代码问题的解决方案。找到了我问题的最近解决方案here但是该解决方案不符合我的问题。

我在我的页面上列出了PHP上传的文件,每个文件都是文件的位置。这工作正常,但我是PHP的新手,并且很难实现其他代码。

这是我正在使用的代码,如果它有帮助:

<?php
    // Directory Location
    $directory = './';

    // Timezone (UK BST)
    date_default_timezone_set(WET);

    // Define Byte Sizes
    function file_size($size)
    {
        $filesizename = array(" Bytes", " KB", " MB", " GB", " TB", " PB", " EB", " ZB", " YB");
        return $size ? round($size/pow(1024, ($i = floor(log($size, 1024)))), 1) . $filesizename[$i] : '0 Bytes';
    }

    // fetches all executable files in that directory and loop over each
    foreach(glob($file.'*wav') as $file) {

        // List Link to Files & Date/Time
        echo '<a class="files" href="'.$file.'">
              <span class="time">' . date("m/d/Y H:i", filemtime($file));

        // List File Name & Size
        echo '</span>&nbsp;&nbsp; '.$file.'&nbsp;&nbsp; 
        Size: '.file_size(filesize($file)).'</a>';
    }
?>

如果可能的话,我希望在PHP中为每个单独的文件生成下载链接。文件列出如下:http://i.stack.imgur.com/N8Lxa.png

2 个答案:

答案 0 :(得分:1)

您应该按以下方式使用上述SO答案的代码:
将您显示的链接更改为以下内容,将用户指向download.php并移交要下载的文件的信息:

echo '<a class="files" href="download.php?file='.$file.'"> ...

然后使用

添加带有SO答案内容的download.php
$filename = $_GET['file'];

从网址中获取给定的文件名。

此外,您必须将header('Content-Type: application/pdf');更改为您要下载的任何文件类型。

答案 1 :(得分:0)

列出文件列表list.php,例如

<?php

// salt for md5 check
$saltmd5 = '76t7gjbertdfv56w45sdve54etyv';


// Directory Location
$directory = './';

// Timezone (UK BST)
date_default_timezone_set(WET);

// Define Byte Sizes
function file_size($size)
{
    $filesizename = array(" Bytes", " KB", " MB", " GB", " TB", " PB", " EB", " ZB", " YB");
    return $size ? round($size/pow(1024, ($i = floor(log($size, 1024)))), 1) . $filesizename[$i] : '0 Bytes';
}

// fetches all executable files in that directory and loop over each
foreach(glob($file.'*wav') as $file) {

    // List Link to Files & Date/Time
    $file_md5 = md5("$file$saltmd5"); // md5 file check
    $file_link = "dwn.php?f=$file&c=$file_md5"; // file link

    echo '<a class="files" href="'.$file_link.'">
          <span class="time">' . date("m/d/Y H:i", filemtime($file));

    // List File Name & Size
    echo '</span>&nbsp;&nbsp; '.$file.'&nbsp;&nbsp; 
    Size: '.file_size(filesize($file)).'</a>';
}


?>

用于下载文件dwn.php,例如

    <?php

    // salt for md5 check
    $saltmd5 = '76t7gjbertdfv56w45sdve54etyv';

$file_md5 = $_GET['c']; // md5 file check
$filename = $_GET['f']; // the name of the file that is downloaded


if($file_md5==md5("$filename$saltmd5")){

     // Directory Location
    $directory = './';

$size = filesize($directory . $filename) ;
header("Content-Type: application/force-download; name=\"". $filename ."\"");
header("Content-Transfer-Encoding: binary");
header("Content-Length: ". $size ."");
header("Content-Disposition: attachment; filename=\"". $filename ."\"");
header("Expires: 0");
header("Cache-Control: no-cache, must-revalidate");
header("Pragma: no-cache");
echo (readfile($directory . $filename));


}
else
   {
    die('no existo'); //bad file
    }

?>