Я не могу понять это, и я знаю, что это просто. Я создаю back-end для очень простой системы управления контентом. Для этой конкретной части я просто пытаюсь создать ссылку PHP, которая позволяет загрузить файл (CV клиента).
МОЯ ПРОБЛЕМА:
Когда щелкнули ссылку для загрузки файла, вместо браузера, предложившего вам выбрать локальный каталог для сохранения файла – он просто отображает файл и кучу символов до и после содержимого документа (я предполагаю, что это файл открытия и закрытия exif-данных для приложения для расшифровки).
Как я могу заставить браузер запрашивать у пользователя «Сохранить как …»?
<?php require("connect.php"); $query = "SELECT * FROM kb_info LIMIT 1"; $result = mysql_query($query, $link); while ($row = mysql_fetch_array($result)) { $file_extension = end(explode(".", $row["extension"])); if ($file_extension == doc) { header('Content-disposition: attachment; filename='.$row["extension"]); header('Content-type: application/doc'); header ("Content-Length: ".filesize($row["extension"])); readfile($row["extension"]); exit; } if ($file_extension == docx) { header('Content-disposition: attachment; filename='.$row["extension"]); header('Content-type: application/docx'); header ("Content-Length: ".filesize($row["extension"])); readfile($row["extension"]); exit; } if ($file_extension == pdf) { header('Content-disposition: attachment; filename='.$row["extension"]); header('Content-type: application/pdf'); header ("Content-Length: ".filesize($row["extension"])); readfile($row["extension"]); exit; } } ?>
Большое спасибо,
Joshie
Я думаю, проблема может заключаться в том, что в файлах PHP есть какие-то пробелы, из-за чего заголовки не отправляются правильно, и поэтому вы видите весь вывод.
Я бы предложил следующие шаги:
проверьте «connect.php» и найдите пустые строки / пробелы в начале / конце файла и удалите их
адаптируйте ваши php-файлы таким образом, чтобы вы не оставили конечный тег ?>
в конце файла – таким образом вы не получите пустые строки в конце файла
если выше этого недостаточно, вам нужно проверить свой журнал ошибок apache и php и / или настроить регистрацию ошибок, так что вы также увидите предупреждения: вам будет сообщено, правильно ли отправлены заголовки или какая-либо другая ошибка
Заголовки, которые я использую для загрузки:
header("Pragma: public"); header("Expires: 0"); header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); header("Cache-Control: public"); header("Content-Description: File Transfer"); header("Content-type: application/force-download"); header("Content-Disposition: attachment; filename=".$file); header("Content-Type: application/octet-stream"); header("Content-Transfer-Encoding: binary"); header("Content-Length: ".$bytes."");