2013-06-12 26 views
0

我一直在尋找解決方案來解決我的代碼問題。對我的問題最近的解決方案被發現here然而,解決方案不適合我的問題。將PHP生成的文件鏈接更改爲可下載的點擊

我在頁面上列出了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

+0

您使用SO回答的參考是一種正確的方法。它也應該爲你工作。 – NullPointer

+0

@NullVoid我無法讓它工作,我用PHP還不夠好,無法將該代碼放入我的。 – Enijar

+0

請參閱@ luk2302的答案。他提出了正確的方法。 – NullPointer

回答

1

,您應該使用的代碼所提到的通過以下方式SO回答:
變化顯示給其直接用戶的download.php和雙手在信息下面的鏈接要下載的文件:

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

然後添加的download.php用的SO回答的內容,但使用

$filename = $_GET['file']; 

獲得給定文件名出的url。

此外,您必須將header('Content-Type: application/pdf');更改爲您想要下載的任何文件類型。

+0

+1對於很好的解釋:) – NullPointer

+0

非常感謝你,這對我有效。 – Enijar

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 
    } 

?> 
+0

謝謝,這個答案對我的問題也很有用。 – Enijar

相關問題