<?php
// Make sure an ID was passed
include('include/function.php');
if(isset($_GET['id'])) {
// Get the ID
$id = intval($_GET['id']);
// Make sure the ID is in fact a valid ID
if($id <= 0) {
die('The ID is invalid!');
}
else {
// Connect to the database
$dbLink = new mysqli('localhost', 'root', 'jio', 'jio');
if(mysqli_connect_errno()) {
die("MySQL connection failed: ". mysqli_connect_error());
}
// Fetch the file information
$query = "
SELECT `id`,`date`,`expected_date`,`comname`,`type`,`name`,`path`,`mime`, `size`, `data`,`other_detail`,`remark`,`username`
FROM `depository`
WHERE `id` = {$id}";
$result = $dbLink->query($query);
if($result) {
// Make sure the result is valid
if($result->num_rows == 1) {
// Get the row
$row = mysqli_fetch_assoc($result);
// Print headers
header("Content-Type: ". $row['mime']);
header("Content-Length: ". $row['size']);
header("Content-Disposition: attachment; filename=". $row['name']);
}
else {
echo 'Error! No image exists with that ID.';
}
// Free the mysqli resources
mysqli_free_result($result);
}
else {
echo "Error! Query failed: <pre>{$dbLink->error}</pre>";
}
mysqli_close($dbLink);
}
}
else {
echo 'Error! No ID was passed.';
}
?>
我正在尝试从路径位置(doc root)下载文件,但收到空文件下载或损坏的文件下载。任何人都可以建议我在上面的代码中哪里出错,或者使用其他任何东西。
最佳答案
发送邮件头后,您需要读取文件内容并发送数据-以下内容未经测试,但或多或少是您需要执行的操作。您可能需要根据sql结果中$filepath
的内容调整$row['path']
变量。
if($result->num_rows == 1) {
$row = mysqli_fetch_assoc($result);
header("Content-Type: ". $row['mime']);
header("Content-Length: ". $row['size']);
header("Content-Disposition: attachment; filename=". $row['name']);
/* you need to actually read the file and send it */
$filepath=$row['path'] . '/' . $row['name'];
if( !realpath( $filepath ) ) exit('Filepath '.$filepath.' is incorrect');
if( $file = fopen( $filepath, 'rb' ) ) {
while( !feof( $file ) and ( connection_status()==0 ) ) {
print( fread( $file, 1024*8 ) );
flush();
}
fclose( $file );
}
}