我一整天都在调查这个问题并陷入困境。我有一个更新表的基本PHP脚本。将详细信息传递给它,然后从上传目录下载文件。
$user = isset($_GET['use'])? $_GET['use'] : null;
$route = isset($_GET['rou'])? $_GET['rou'] : null;
$expires = isset($_GET['exp'])? $_GET['exp'] : null;
$itemnu = isset($_GET['item'])? $_GET['item'] : null;
$host="host";
$username="username";
$password="password";
$db_name="username";
$con=mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("can not select DB");
$query = "INSERT INTO database.table(item,name,expiry) VALUES ('$itemnu', '$user', '$expires')";
mysql_query($query) or die('Query "' . $query . '" failed: ' . mysql_error());
echo "<meta http-equiv=\"Refresh\" content=\"0; url=/upload/" . $route . "\">";
我现在需要做的是重定向回主页。但是你知道你用PHP下载后无法重定向,如果我重定向它之前它不起作用。我试过了
fopen和file_get_contents
但由于文件将是各种各样的微软,文本和PDF格式,我无法让它工作。我也尝试过(删除作为编辑的一部分 我看了一个JavaScript,无法工作如何使用PHP变量下载文件。有任何帮助,请提前感谢。 php脚本没有任何要求,它可以是任何有效的。 这是上传文件
<?php
$target = "../upload/";
$target = $target . str_replace(" ","_",( $_FILES['file']['name']));
$current = time();
$name=addslashes($_POST['title']);
$owner=$_POST['owner'];
$pic=str_replace(" ","_",($_FILES['file']['name']));
$time = strtotime($_POST['timestamp']);
$grade= implode(', ', $_POST['g_group']);
$Loc= implode(', ', $_POST['l_group']);
mysql_connect("host", "database", "password") or die(mysql_error()) ;
mysql_select_db("database") or die(mysql_error()) ;
$query =("INSERT INTO UPLOAD (title,owner,faoGrade, foaLocation,date, expiry,route)
VALUES
('$name', '$owner','$grade','$Loc','$current','$time', '$pic')");
mysql_query($query);
if(move_uploaded_file($_FILES['file']['tmp_name'], $target))
{
echo "The file ". basename( $_FILES['uploadedfile']['name']). " has been uploaded, and your information has been added to the directory";
} else {
echo "Sorry, there was a problem uploading your file using " . query ;
}
?>
并修改了下载
<?php
$user = isset($_GET['use'])? $_GET['use'] : null;
$route = isset($_GET['rou'])? $_GET['rou'] : null;
$expires = isset($_GET['exp'])? $_GET['exp'] : null;
$itemnu = isset($_GET['item'])? $_GET['item'] : null;
$host="host";
$username="username";
$password="password";
$db_name="database";
$con=mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("can not select DB");
$query = "INSERT INTO database.READ(item,name,expiry) VALUES ('$itemnu', '$user', '$expires')";
mysql_query($query) or die('Query "' . $query . '" failed: ' . mysql_error());
sleep(20); //added didn't help
header('Content-type: application/octet-stream');
header('Content-Disposition: attachment; filename='.$route);
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Content-Length: " . filesize($route)); //added didn't work
readfile('/upload/'.$route);
header("refresh: 150; roster.php?action=Home");
exit;
?>
答案 0 :(得分:0)
它无法真正完成'服务器端'。
但是,由于浏览器通常会在下载过程中保持相同的“网页”打开,该页面可以在下载开始后重定向到您想要的任何位置。 (即使用Javascript)
所以它的页面包含您需要修改的下载脚本的链接,而不是实际的下载脚本本身。
答案 1 :(得分:0)
尝试将内容类型更改为application / pdf
我刚刚在PHP中完成了与此类似的工作,我不得不创建一个文件上传器,当用户将pdf文件上传到网页时,它将在该文件上运行shell exec命令来解密它并允许更多的权限,然后它会自动重新下载到用户计算机,我也知道你缺少一些代码来帮助这一点。此外,你的PHP方式,你总是要读取文件'upload.pdf'如果文件有不同的名称怎么办?
readfile($fileName . '.pdf');
最后,在退出之前的那一行;你有一个额外的分号
答案 2 :(得分:0)
尝试这样的事情,看看会发生什么
$query = "INSERT INTO database.table(item,name,expiry) VALUES ('$itemnu','$user','$expires')";
if(mysql_query($query))
{
header('Location:homepage.html');
}else{
print_r($_GET); //check GET requests
die;
}