#php #pdf #download
#php #PDF #Скачать
Вопрос:
Я пытаюсь загрузить PDF-файлы на локальный компьютер. В Xampp с localhost появляется обычное окно загрузки. Загрузка не читается с помощью Adobe.
То же самое с zip-загрузкой.
На моем веб-сайте это окно не отображается, вместо этого pdf-файл отображается на вкладке браузера как тарабарщина.
Таким образом, PDF-файл определенно существует и каким-то образом доступен и загружен.
Я не могу найти, что не так с кодом…
Пожалуйста, помогите.
<?php
if (isset($_POST["hilfe_de"]))
{
$filepath = "dateien/";
$file = "callershelp_help-de.pdf";
header('Content-Description: File Transfer');
header("Content-Type: application/pdf");
header("Content-Transfer-Encoding: Binary");
header("Content-Disposition: attachment; filename=".$file);
header("Content-Length: ". filesize($filepath.$file));
@readfile($filepath.$file);
}
?>
... some html-stuff
<form method="post">
<table>
<td>
<tr>
amp;nbsp;Callershelp_Hilfe_DE.pdf
</tr>
<tr>
amp;nbsp;
</tr>
<tr>
<input type="submit" name="hilfe_de" value="Download">
</tr>
</td>
</table
</form>
Комментарии:
1. Привет, Маннис, и добро пожаловать в stackoverflow! Пожалуйста, загрузите файл и откройте его с помощью текстового редактора (например, Visual Studio Code, Notepad или Sublime Text). Я полагаю, что содержится сообщение об ошибке.
2. Поместите ваш PHP в отдельный файл без пробелов перед открытием
<?php
и без закрытия?>
.3. Пожалуйста, используйте комментарии, а не ответы, для ответа на предложение решения или отредактируйте свой пост, чтобы добавить больше информации.
Answers
предназначены для решения (предложений) 🙂4. Какой файл я должен открыть с помощью блокнота?
5. Тот, который загружается при отправке формы на вашем веб-сайте. И вы можете добавить
file_put_contents('debug.txt', $filepath.$file);
after@readfile
, чтобы увидеть, как выглядит ваш путь в локальной и онлайн-среде.
Ответ №1:
Проблема решена: в PHP иногда возникают проблемы с начальными пробелами. Я сделал отступы в строках для лучшего чтения. Только после удаления начальных пробелов в первых 2 строках все работало просто отлично. Это заняло у меня пару дней 8-(
$filepath = '../path/';
$file = 'file.pdf';
header('Content-Description: File Transfer');
header('Content-Type: application/pdf');
header('Content-Transfer-Encoding: Binary');
header('Content-Disposition: attachment; filename="' . $file . '"');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: '. filesize($filepath.$file));
readfile($filepath.$file);
Невероятно …
Комментарии:
1. Отлично! Пожалуйста, отметьте этот ответ как принятый, чтобы другие пользователи могли легко найти решение.
Ответ №2:
Я считаю, что проблема в том, что вы не указываете полный путь, и именно поэтому @readfile
не можете прочитать PDF. Вы можете использовать dirname
для этого:
$filepath = dirname(__FILE__) . '/dateien/'; // equals the path of your script (__FILE__) plus the folder "dateien"
$file = "callershelp_help-de.pdf";
header('Content-Description: File Transfer');
header("Content-Type: application/pdf");
header("Content-Transfer-Encoding: Binary");
header('Content-Disposition: attachment; filename="' . $file . '"'); // improvement, see https://www.php.net/manual/en/function.readfile.php#114450
header("Content-Length: ". filesize($filepath . $file));
@readfile($filepath . $file);
Привет из Германии,
Йоханнес