Загрузка файла (PHP)

100
28 ноября 2020, 14:40

Почему функция записывает в начало возвращаемого файла HTML код моей страницы, а уже потом дописывается сам файл. В чём может быть проблема? Заранее спасибо.

Пример (то что мне вернул сервер):

<html>
<head>
    <link href='style.css' rel='stylesheet'>
</head>
<body bgcolor="#696969">
    <img src="img/banner.jpg" width="100%" height="20%">
<html>
<head>
    <link href='style.css' rel='stylesheet'>
</head>
<body>
</body>
</html>
<div class='inf' align='right'>Welcome, 21232f297a57a5a743894a0e4a801fc3!<br></div><div class='date-time' align='right'>20:10:41 05.04.19<br></div><html>
<head>
    <link href='style.css' rel='stylesheet'>
</head>
<body>
</body>
</html>
<?php 
    function file_download($filename, $mimetype='application/octet-stream') { 
        if (file_exists($filename)) { 
            header($_SERVER["SERVER_PROTOCOL"] . ' 200 OK'); 
            header('Content-Type: ' . $mimetype);        
            header('Last-Modified: ' . gmdate('r', filemtime($filename))); 
            header('ETag: ' . sprintf('%x-%x-%x', fileinode($filename), filesize($filename), filemtime($filename))); // ?????????? ????????????? ????????? 
            header('Content-Length: ' . (filesize($filename))); // ?????? ????? 
            header('Connection: close'); 
            header('Content-Disposition: attachment; filename="' . basename($filename) . '";'); 
            echo file_get_contents($filename); 
    } else { 
            header($_SERVER["SERVER_PROTOCOL"] . ' 404 Not Found'); 
            header('Status: 404 Not Found'); 
    } 
    exit; 
} 

?>

Этого не должно быть:

<html>
<head>
    <link href='style.css' rel='stylesheet'>
</head>
<body bgcolor="#696969">
    <img src="img/banner.jpg" width="100%" height="20%">
<html>
<head>
    <link href='style.css' rel='stylesheet'>
</head>
<body>
</body>
</html>
<div class='inf' align='right'>Welcome, 21232f297a57a5a743894a0e4a801fc3!<br></div><div class='date-time' align='right'>20:10:41 05.04.19<br></div><html>
<head>
    <link href='style.css' rel='stylesheet'>
</head>
<body>
</body>
</html>

Вот функция:

function file_download($filename, $mimetype='application/octet-stream') { 
    if (file_exists($filename)) { 
        header($_SERVER["SERVER_PROTOCOL"] . ' 200 OK'); 
        header('Content-Type: ' . $mimetype);        
        header('Last-Modified: ' . gmdate('r', filemtime($filename))); 
        header('ETag: ' . sprintf('%x-%x-%x', fileinode($filename), filesize($filename), filemtime($filename))); // ?????????? ????????????? ????????? 
        header('Content-Length: ' . (filesize($filename))); // ?????? ????? 
        header('Connection: close'); 
        header('Content-Disposition: attachment; filename="' . basename($filename) . '";'); 
        echo file_get_contents($filename); 
} else { 
        header($_SERVER["SERVER_PROTOCOL"] . ' 404 Not Found'); 
        header('Status: 404 Not Found'); 
} 
    exit; 
} 
Answer 1
function file_download ($filename, $mimetype='application/octet-stream') {
  if (file_exists ($filename)) {
    header ($_SERVER["SERVER_PROTOCOL"] . ' 200 OK');
    header ('Content-Type: ' . $mimetype);
    header ('Last-Modified: ' . gmdate ('r', filemtime ($filename)));
    header ('ETag: ' . sprintf ('%x-%x-%x', fileinode ($filename), filesize ($filename), filemtime ($filename)));
    header ('Content-Length: ' . (filesize ($filename)));
    header ('Connection: close');
    header ('Content-Disposition: attachment; filename="' . basename ($filename) . '";');
// Открываем искомый файл
    $f=fopen ($filename, 'r');
    while (!feof ($f)) {
// Читаем килобайтный блок, отдаем его в вывод и сбрасываем в буфер
      echo fread ($f, 1024);
      flush ();
    }
// Закрываем файл
    fclose ($f);
  } else {
    header ($_SERVER["SERVER_PROTOCOL"] . ' 404 Not Found');
    header ('Status: 404 Not Found');
  }
  exit;
}
READ ALSO
Требуется переработать код для отчёта(canvas) [закрыт]

Требуется переработать код для отчёта(canvas) [закрыт]

Хотите улучшить этот вопрос? Добавьте больше подробностей и уточните проблему, отредактировав это сообщение

109
PHP - способы объявления функции

PHP - способы объявления функции

В PHP всегда объявлял функции вот так:

139
Реализовать связанный select опций

Реализовать связанный select опций

На входе имеется строка типа:

121
laravel controller синтаксис ,

laravel controller синтаксис ,

как правильно написать что при каждом цикле получить последовательную цифру типа

115