Я загрузил изображения в базу данных MySQL. Я пытаюсь загрузить сохраненный файл. Но мой скрипт показывает следующее предупреждение:
Предупреждение: невозможно изменить информацию заголовка – заголовки, уже отправленные
Я также тестировал: Content-Disposition: attachment
. Но это все еще не работает. Файл не загружается, вместо этого он печатает файл:
Вот мой код:
$query = "SELECT * FROM Upload"; $result = mysqli_query ( $con, $query) or die ("Couldn't execute SELECT query: ". mysqli_error($con)); $nrows = mysqli_num_rows($result); echo '<table> <tr> <td>Id</td> <td>Name</td> <td>Type</td> <td>Size (MB)</td> </tr>'; $selfpg = $_SERVER['PHP_SELF']; while( $row = mysqli_fetch_assoc($result) ){ extract($row); echo "<tr> <td>$Id</td> <td>$Name</td> <td>$Type</td> <td>$SizeMB</td> <td> <a href='$selfpg?id=$Id'> Download </a> </td> </tr>"; } echo '</table>'; //---------------------------------------------------------------------- if ( isset($_GET['id']) ){ mysqli_data_seek($result,0); $row = mysqli_fetch_assoc($result); extract($row); header("Content-Type: ". $Type); header("Content-Length: ". $SizeMB); header("Content-Disposition: inline; filename= ". $Name); echo $Content; } else{ echo "<br>No id received to download a file</br>"; }
Ваш скрипт начинает выводить данные с помощью echo
. Это означает, что заголовки по умолчанию уже отправлены, поскольку вы эхом отзываете что-то на странице, поэтому вы не можете отправить их повторно. Чтобы иметь возможность отображать что-то на странице, одновременно отправляя заголовки, необходимые для загрузки файла, вы должны использовать буферизацию вывода