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 のエントリすべてに対して、Google Chrome で正常に動作します。それらの143のうち5つを除いて、Firefoxでも問題なく動作します。

Firefox の場合は次のように表示されます:(これらの 5 つのエントリの場合):ここに画像の説明を入力

データベースでは、ファイルパスを使用してファイルを保存しています。すべてのファイルは、zip 形式または rar 形式のいずれかです。これらのファイルは、rar/zip 形式でダウンロードされません。google chrome では全く問題ありません。スクリプトに何か問題がありますか?

4

2 に答える 2

1

まず、MYSQL_関数の使用をやめてください。Why-shouldnt-i-use-mysql-functions-in-php を参照してください。

$idreceived = addslashes($_REQUEST['sendid']);第二に、SQL インジェクションを防ぐ良い方法として使用しています。残念ながら、あなたは のようにクエリを呼び出しているWHERE bd_brushid = $idreceivedので、引用符なしで.

言い換えれば、引用符を使用しない限り、あなたはまだ脆弱です. 私が送信することを検討してくださいsendid=1 OR 1=1。2 番目のクエリですべての行が更新されます。

に変更するWHERE bd_brushid = '$idreceived'か、さらに良い方法: how-to-prevent-sql-injection-in-php を確認してください。

今あなたの問題に。引用符を含めるには、1行を次のように変更する必要があると思います

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.Your ファイルには拡張子がないようです。

于 2013-06-07T14:10:06.973 に答える