a.php と b.php の 2 つのファイルがあります
a.php のリンクをクリックしてファイルのダウンロードを開始します: コードは次のとおりです
これは a.php です
<?php $file_dir = "D:/files";$file_name = $row[1]; //这是从数据库中查找出来的echo "<a href='./b.php?file_dir=" . $file_dir . "&file_name=" . $file_name . "'>" . $row[2] . "</a>"; //点击这个链接,下载的文件名是对的,就是文件里没有内容,如果是图片,图片没有预览?>
<?php $file_name = $_GET['file_name']; //文件名 $file_dir = $_GET['file_dir']; //文件路径 if(!file_exists($file_dir.$file_name)){ echo "找不到 [" . $file_dir.$file_name . "] 文件"; exit; }else{ $file=fopen($file_dir.$file_name,"r"); Header("Content-type: application/octet-stream"); Header("Accept-Ranges:bytes"); Header("Accept-Length:".filesize($file_dir.$file_name)); Header("Content-Disposition: attachment; filename=".$file_name); }?>
a.php では、$file_dir = "D:/files";
次に、b.php の $file_dir.$file_name にパス文字がありません
あなたphp では $file=fopen($file_dir.$file_name,"r"); のみがファイルを開きますが、 $file=fopen($file_dir. $file_name,"r"); 開いたファイルが画像の場合、画像データは正しく読み込まれません
バイナリ モードで開く必要があります: $file=fopen($file_dir.$file_name,"r b");
a.php では、$file_dir = "D: /files";
$file=fopen($file_dir.$file_name," のみです) b.php で r"); を実行してファイルを開きますが、ファイルの内容は出力されません
$file=fopen($file_dir.$file_name,"r"); で開いたファイルが画像の場合、画像データは正しく読み込まれません
バイナリモードで開く必要があります: $ file=fopen($file_dir.$file_name,"r b");
理解していますが、これに変更しましたが、結果は依然としてコードは次のとおりです
<?php $file_name = $_GET['file_name']; //文件名 $file_dir = $_GET['file_dir']; //文件路径为当前目录 if(!file_exists($file_dir.$file_name)){ echo "找不到 [" . $file_dir.$file_name . "] 文件"; exit; }else{ $file=fopen($file_dir.$file_name,"rb"); readfile($file); Header("Content-type: application/octet-stream"); Header("Accept-Ranges:bytes"); Header("Accept-Length:".filesize($file_dir.$file_name)); Header("Content-Disposition: attachment; filename=".$file_name); ob_clean(); flush(); exit; ?>
<?php $file_name = $_GET['file_name']; //文件名 $file_dir = $_GET['file_dir']; //文件路径为当前目录 if(!file_exists($file_dir.$file_name)){ echo "找不到 [" . $file_dir.$file_name . "] 文件"; exit; }else{ $file=fopen($file_dir.$file_name,"rb"); readfile($file); Header("Content-type: application/octet-stream"); Header("Accept-Ranges:bytes"); Header("Accept-Length:".filesize($file_dir.$file_name)); Header("Content-Disposition: attachment; filename=".$file_name); ob_clean(); flush(); exit;?>
}else{ $file = $file_dir.$file_name; Header("Content-type: application/octet-stream"); Header("Accept-Ranges:bytes"); Header("Accept-Length:".filesize($file)); Header("Content-Disposition: attachment; filename=".$file_name); readfile($file); }
れー