2012-12-07 125 views
0

我有這個下載腳本完美的工作,但一個文件被下載,我想重新加載頁面。但是一旦文件被下載,頁面就會死亡?它應該是一個安全的下載腳本,因此用戶無法看到文件的路徑。它通過使用POST提交刷新下載腳本不起作用

<?php 
session_start(); 

//Assign variables from session 
$userid = $_SESSION["id"]; 
$email = $_SESSION['email']; 
$password = $_SESSION['password']; 

//Require database connection and functions 
require('includes/config.php'); 
include('includes/functions.php'); 

//Check if user is logged in 
if (!$userid || !$email || !$password) 
{ 
    header("Location: index.php"); 
}  

// Usage: <a href="download.php?file=test.txt&category=test">Download</a> 
// Path to downloadable files (will not be revealed to users so they will never know your file's real address) 
$hiddenPath = "uploaded_notes/"; 

// VARIABLES 
if (!empty($_POST['file'])){ 
$file_id = $_POST['file']; 
    $result = mysql_query("SELECT * FROM files WHERE id='$file_id'"); 
    $row = mysql_fetch_array($result); 
$file = $row['location']; 
$price = $row['price']; 

    $result2 = mysql_query("SELECT coins FROM users WHERE id='$userid'"); 
    $row2 = mysql_fetch_array($result2); 
$coins = $row2['coins']; 

$new_coins = $coins-$price; 
if ($new_coins >= 0) 
{ 
    mysql_query("UPDATE users SET coins = $new_coins WHERE id='$id'"); 
} 
else { 
header("Location: dashboard.php"); 
die(); 
} 

//Insert into purchases 
$datetime = date("Y-m-d H:i:s");@ 
mysql_query("INSERT INTO purchases (userid, fileid, datetime) VALUES ('$userid', '$file_id', '$datetime')"); 

$file = str_replace('%20', ' ', $file); 
$category = (!empty($_GET['category'])) ? $_GET['category'] . '/' : ''; 
} else { 
    header('Location: dashboard.php'); 
    die('Hacking attempt reported.'); 
} 

$file_real = $hiddenPath . $category . $file; 
$ip = $_SERVER['REMOTE_ADDR']; 

// If requested file exists 
if (file_exists($file_real)){ 
// Get extension of requested file 
$extension = strtolower(substr(strrchr($file, "."), 1)); 
// Determine correct MIME type 
switch($extension){ 
case "asf": $type = "video/x-ms-asf"; break; 
case "avi": $type = "video/x-msvideo"; break; 
case "exe": $type = "application/octet-stream"; break; 
case "mov": $type = "video/quicktime"; break; 
case "mp3": $type = "audio/mpeg"; break; 
case "mpg": $type = "video/mpeg"; break; 
case "mpeg": $type = "video/mpeg"; break; 
case "rar": $type = "encoding/x-compress"; break; 
case "txt": $type = "text/plain"; break; 
case "wav": $type = "audio/wav"; break; 
case "wma": $type = "audio/x-ms-wma"; break; 
case "wmv": $type = "video/x-ms-wmv"; break; 
case "zip": $type = "application/x-zip-compressed"; break; 
case "jpg": $type = "image/jpeg"; break; 
default: $type = "application/force-download"; break; 
} 
// Fix IE bug [0] 
$header_file = (strstr($_SERVER['HTTP_USER_AGENT'], 'MSIE')) ? preg_replace('/\./', '%2e', $file, substr_count($file, '.') - 1) : $file; 
// Prepare headers 
header("Pragma: public"); 
header("Expires: 0"); 
header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 
header("Cache-Control: public", false); 
header("Content-Description: File Transfer"); 
header("Content-Type: " . $type); 
header("Accept-Ranges: bytes"); 
header("Content-Disposition: attachment; filename=\"" . $header_file . "\";"); 
header("Content-Transfer-Encoding: binary"); 
header("Content-Length: " . filesize($file_real)); 



// Send file for download 
if ($stream = fopen($file_real, 'rb')){ 
while(!feof($stream) && connection_status() == 0){ 

//reset time limit for big files 
print(fread($stream,1024*8)); 
flush(); 

} 
fclose($stream); 
} 
}else{ 
// Requested file does not exist (File not found) 
echo("Requested file does not exist"); 
die(); 

} 
?> 

刷新代碼工作稱爲如果我把它

print(fread($stream,1024*8)); 

之前但在那之後它不工作的權利......

+0

你的「刷新」代碼在哪裏? –

+0

這只是一個標題刷新 –

回答

1

下載文件是一個一次性的事情。下載文件後,您將無法重定向。在抽出內容之前,您可以嘗試添加刷新標題,但有些瀏覽器會將其視爲取消內容。

看到這個職位的詳細資料:https://stackoverflow.com/questions/5960895/redirect-after-download-not-working-php

您可以閱讀this postthis postthis post以獲取更多信息。

基本上,他們都歸結爲HTTP標頭。在您擁有echoed內容後,無法發送重定向標頭。另一方面,在echoing內容之前的重定向標題將僅取消下載。

不同的方式,你可以做到這一點將是有一個隱藏的iframe,並提交你的請求,但我猜這不是你想要的。