Заголовочный файл поврежден

Я пытаюсь загрузить файлы через заголовки из моей базы данных. Я не уверен, почему все мои загруженные файлы повреждены, когда я меняю код загрузки на тот, который использует ООП, но хорошо, когда мой код не-ООП.

Здесь я получаю идентификатор файла и вызываю функцию загрузки: (handleDownload.php)

if (isset($_GET['id'])) {
$id = $_GET['id'];
//pump id into function getDBFiles to pull file with matching id
$fileData = $Download->getDBFiles($id);
header('Content-Type:"' . $fileData[2]. '"');
header('Content-Disposition: attachment; filename="' . $fileData[1]. '"');
echo $fileData[0];
exit;
}

Это функция, которая извлекает файл из базы данных (download.php)

public function getDBFiles($id) {
global $database;
$sql = "SELECT * FROM ".self::$table_name." WHERE resume_id ='" . $id . "'";
$result = $database->query($sql);
if ($row = $result->fetch_array(MYSQLI_ASSOC)) {
$name = $row['resume_title'];
$type = $row['file_type'];
$content = $row['resume_data']; //content of file
//$size = $row['file_size']; //file size
return array($content, $name, $type);
}
}
$Download = new Download();
$download =& $Download;

Код работает нормально, если он все на одной странице, как показано ниже:

if (isset($_GET['id'])) {
$id = $_GET['id'];
mysqli_select_db($con, "apples");

$query = "SELECT * FROM resume where resume_id ='" . $id . "'";
$result = mysqli_query($con, $query) or die('Error, query failed');


if ($row = $result->fetch_array(MYSQLI_ASSOC)) {
$name = $row['resume_title'];
$type = $row['file_type'];
$content = $row['resume_data']; //content of file
$size = $row['file_size']; //file size
header('Content-Type:"' . $type . '"');
//header('Content-length:"' . $size . '"');
header('Content-Disposition: attachment; filename="' . $name . '"');
//var_dump($row);
echo $content;
}
}

ОБНОВИТЬ:
Я сейчас получаю файл загрузки поврежден, а не пустой файл. Таким образом, один и тот же файл выводится разными кодами загрузки. Один сверху взят из кода ООП, в то время как другой из рабочей не-ООП версии.
шестнадцатеричное сравнение

Это мой код загрузки в полном объеме.

try {
//execute retrieval of files from database
$Download-> showDBFiles();
//pass results to output array
$output = $Download->getMessages();
//if id is set then get file from database
if (isset($_GET['id'])) {
$id = $_GET['id'];
//pump id into function getDBFiles to pull file with matching id
$fileData = $Download->getDBFiles($id);
header('Content-Type:"' . $fileData[2]. '"');
header('Content-Disposition: attachment; filename="' . $fileData[1]. '"');
echo $fileData[0];
die();
}
} catch (Exception $e) {
$result[] = $e->getMessages();
}

После вызова функций я бы выводил вывод (ссылки на скачивание) с циклом foreach

<h2>Output</h2>
<?php if ($output) { ?>
<ul class="result">
<?php
foreach ($output as $message) {
$id = $message['id'];
$name = $message['name'];
?>
<li><a href="handleDownload.php?id=<?php echo $id; ?>"><?php echo $name; ?></a></li>

<?php }
?>
</ul>

7

Решение

В вашем решении, отличном от ООП, проверьте наличие начальных пробелов в файле php.

Следующий код создаст поврежденный файл из-за начальных пробелов.

 <?php
if (isset($_GET['id'])) {...

Это также относится к пробелам после закрывающего тега php (который вы не должны использовать).

Эти символы будут отправлены вашим браузером, включены в поток загрузки и повредят весь файл.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]