0

download.php

<?php require_once('Connections/connection_psfriend.php'); ?>
<?php
$idreceived = addslashes($_REQUEST['sendid']);

$filepathquery = "SELECT bd_brushfilepath FROM tbl_brushdescription WHERE bd_brushid = $idreceived";
$Recordset = mysql_query($filepathquery,$connection_psfriend) or die(mysql_error());
$filepath = mysql_fetch_assoc($Recordset);
$receivedfilerequest = $filepath['bd_brushfilepath'];
$file_path = $_SERVER['DOCUMENT_ROOT'].'/'.'ps-friend'.'/' . $receivedfilerequest;

$updatedownlaodquery = "UPDATE tbl_brushdescription SET bd_brushdownloads = bd_brushdownloads + 1 WHERE bd_brushid = $idreceived";
$Recordset = mysql_query($updatedownlaodquery,$connection_psfriend) or die(mysql_error());
if(file_exists( $file_path)){

header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename($file_path));
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($file_path));
ob_clean();
flush();
readfile($file_path);
exit;

}

我的问题:

该代码适用于谷歌浏览器,适用于数据库中的所有 143 个条目。除了这 143 个中的 5 个之外,它在 Firefox 上也可以正常工作。

对于 Firefox,它显示:(对于这 5 个条目):在此处输入图像描述

在数据库中,我使用文件路径来存储文件。所有文件都是 zip 格式或 rar 格式。这些文件不是以 rar/zip 格式下载的。用谷歌浏览器,完全没有问题。剧本有问题吗?

4

2 回答 2

1

首先,请停止使用MYSQL_函数,看看为什么-shouldnt-i-use-mysql-functions-in-php

其次,您将$idreceived = addslashes($_REQUEST['sendid']);其用作防止 SQL 注入的好方法。不幸的是,您正在调用查询WHERE bd_brushid = $idreceived,因此没有引号。

换句话说,只要我不使用任何引号,您仍然是脆弱的。考虑我发送sendid=1 OR 1=1。您的所有行都将在第二个查询中更新。

将其更改为WHERE bd_brushid = '$idreceived',甚至更好:检查how-to-prevent-sql-injection-in-php

现在到你的问题。我认为您应该将一行更改为以下内容以包含引号

header('Content-Disposition: attachment; filename="'.basename($file_path).'"');

如果它仍然不起作用,请在标头中发送正确的内容类型。

<?php

$finfo = finfo_open(FILEINFO_MIME_TYPE);
$type = finfo_file($finfo, $file_path);

header('Content-Type: '.$type)
?>
于 2013-06-07T14:09:59.163 回答
1

以下一直对我有用

$file=$_POST['file'];
header( "Content-Disposition: attachment; filename=$file" );
readfile("$_POST[file]");

没有任何内容类型标题。但是我的文件扩展名是。您的.zip文件似乎没有扩展名。

于 2013-06-07T14:10:06.973 回答